From e3e3b8682530b62c6900c5322e9c37ec637bbe70 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Wed, 21 Aug 2019 15:19:28 -0500 Subject: [PATCH] [Xamarin.Android.Build.Tasks] Add MSBuild support for DIM. --- build-tools/automation/azure-pipelines.yaml | 7 ++ .../Tasks/Generator.cs | 29 +++++++ .../BindingBuildTest.cs | 58 +++++++++++++ .../Xamarin.Android.Bindings.targets | 2 + .../Jars/DefaultMethodsInterface.java | 10 +++ .../Jars/EmptyOverrideClass.java | 5 ++ .../Jars/ImplementedOverrideClass.java | 18 ++++ ...Android.DefaultInterfaceMethods-Lib.csproj | 75 +++++++++++++++++ .../DimBindingTests.cs | 39 +++++++++ .../MainActivity.cs | 18 ++++ .../Properties/AndroidManifest.xml | 8 ++ .../Properties/AssemblyInfo.cs | 30 +++++++ .../TestInstrumentation.cs | 24 ++++++ ...droid.DefaultInterfaceMethods-Tests.csproj | 83 +++++++++++++++++++ ...roid.DefaultInterfaceMethods-Tests.targets | 40 +++++++++ 15 files changed, 446 insertions(+) create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/DefaultMethodsInterface.java create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/EmptyOverrideClass.java create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/ImplementedOverrideClass.java create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Xamarin.Android.DefaultInterfaceMethods-Lib.csproj create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/DimBindingTests.cs create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/MainActivity.cs create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AndroidManifest.xml create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AssemblyInfo.cs create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/TestInstrumentation.cs create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.csproj create mode 100644 tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.targets diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 493695beaaa..bc58b8b77d1 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -405,6 +405,13 @@ stages: project: tests/EmbeddedDSOs/EmbeddedDSO/EmbeddedDSO.csproj testResultsFiles: TestResult-Xamarin.Android.EmbeddedDSO_Test.nunit-$(ApkTestConfiguration).xml + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.DefaultInterfaceMethods-Tests + project: tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.DefaultInterfaceMethods-Tests-$(ApkTestConfiguration).xml + - task: MSBuild@1 displayName: run Xamarin.Forms-Performance-Integration inputs: diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs b/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs index f0a189ecf7b..f1ecbe93522 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs @@ -45,6 +45,10 @@ public class BindingsGenerator : AndroidToolTask [Required] public string MonoAndroidFrameworkDirectories { get; set; } + public string LangVersion { get; set; } + + public bool EnableInterfaceMembersPreview { get; set; } + public ITaskItem[] TransformFiles { get; set; } public ITaskItem[] ReferencedManagedLibraries { get; set; } public ITaskItem[] AnnotationsZipFiles { get; set; } @@ -131,6 +135,9 @@ protected override string GenerateCommandLineCommands () if (UseShortFileNames) cmd.AppendSwitch ("--use-short-file-names"); + if (EnableInterfaceMembersPreview && SupportsCSharp8) + cmd.AppendSwitch ("--lang-features=interface-constants,default-interface-methods"); + return cmd.ToString (); } @@ -142,5 +149,27 @@ protected override string GenerateFullPathToTool () { return Path.Combine (ToolPath, ToolExe); } + + bool SupportsCSharp8 { + get { + // These are the values that pre-date C# 8. We assume any + // new value we encounter is something that supports it. + switch (LangVersion) { + case "7.3": + case "7.2": + case "7.1": + case "7": + case "6": + case "5": + case "4": + case "3": + case "ISO-2": + case "ISO-1": + return false; + } + + return true; + } + } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 1333a761455..f1d3d94a6c7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -510,5 +510,63 @@ public void DesignTimeBuild (string classParser) } } } + + [Test] + [TestCaseSource (nameof (ClassParseOptions))] + public void BindDefaultInterfaceMethods (string classParser) + { + var proj = new XamarinAndroidBindingProject { + IsRelease = true, + }; + + // The sources for the .jar is in the jar itself. + string classesJarBase64 = @" +UEsDBBQACAgIANWk6UwAAAAAAAAAAAAAAAAJAAQATUVUQS1JTkYv/soAAAMAUEsHCAAAAAACAAAAAAA +AAFBLAwQUAAgICADVpOlMAAAAAAAAAAAAAAAAFAAAAE1FVEEtSU5GL01BTklGRVNULk1G803My0xLLS +7RDUstKs7Mz7NSMNQz4OVyLkpNLElN0XWqBAlY6BnEG5obKmj4FyUm56QqOOcXFeQXJZYA1WvycvFyA +QBQSwcIFGFrLUQAAABFAAAAUEsDBAoAAAgAAK2k6UwAAAAAAAAAAAAAAAAEAAAAY29tL1BLAwQKAAAI +AACtpOlMAAAAAAAAAAAAAAAADAAAAGNvbS94YW1hcmluL1BLAwQKAAAIAACwpOlMAAAAAAAAAAAAAAA +AEQAAAGNvbS94YW1hcmluL3Rlc3QvUEsDBBQACAgIAJmk6UwAAAAAAAAAAAAAAAAuAAAAY29tL3hhbW +FyaW4vdGVzdC9EZWZhdWx0SW50ZXJmYWNlTWV0aG9kcy5jbGFzc3WOvU7DMBSFjxsnKeWnXUE8QLrgh +ScAhBSJnwHE7qQ3JVUSC8dGFc/EwsrAA/BQiOuqLKnw8Pn4+LuWv38+vwCcY5biKMVUIKqMYWbzXEBe +mgUJTG/qju58W5B91EXDTbIkd6HtX3jj0G+DzPL5E28v3q8FJg/G25Ku6zB1ekWV9o3LO0e20iXdkns +2i/5spV+1QFaaVq11q23dKUe9U//4ArMwoRrdLdV9saLSJQICI4QVc4ogmTGfThBugFH0zuR/MpNNE7 +x015NDL3C868VDL2XuYbL1joMTjI+BNpYC+/xcaA820uEvUEsHCIw1aijpAAAAhQEAAFBLAwQUAAgIC +ACYpOlMAAAAAAAAAAAAAAAAHAAAAERlZmF1bHRJbnRlcmZhY2VNZXRob2RzLmphdmF1zLEOwiAQBuCd +p7hRl0Zd2YyLgw9xwlGJFCocTWPTdxdSHarxxv///utR3bElUKFrRuwwWt8wJZZC9PnqrALrmaJBRXA +ig9nx+RNciG9BJzEJKKeXtnowIcBmCxNE4hw97CTMP6glPmJcuf1f91y5w7cbgtWQ3rCOBnSZymJhNX +nkPJYnUsziBVBLBwgzfz2miQAAAPUAAABQSwECFAAUAAgICADVpOlMAAAAAAIAAAAAAAAACQAEAAAAA +AAAAAAAAAAAAAAATUVUQS1JTkYv/soAAFBLAQIUABQACAgIANWk6UwUYWstRAAAAEUAAAAUAAAAAAAA +AAAAAAAAAD0AAABNRVRBLUlORi9NQU5JRkVTVC5NRlBLAQIKAAoAAAgAAK2k6UwAAAAAAAAAAAAAAAA +EAAAAAAAAAAAAAAAAAMMAAABjb20vUEsBAgoACgAACAAAraTpTAAAAAAAAAAAAAAAAAwAAAAAAAAAAA +AAAAAA5QAAAGNvbS94YW1hcmluL1BLAQIKAAoAAAgAALCk6UwAAAAAAAAAAAAAAAARAAAAAAAAAAAAA +AAAAA8BAABjb20veGFtYXJpbi90ZXN0L1BLAQIUABQACAgIAJmk6UyMNWoo6QAAAIUBAAAuAAAAAAAA +AAAAAAAAAD4BAABjb20veGFtYXJpbi90ZXN0L0RlZmF1bHRJbnRlcmZhY2VNZXRob2RzLmNsYXNzUEs +BAhQAFAAICAgAmKTpTDN/PaaJAAAA9QAAABwAAAAAAAAAAAAAAAAAgwIAAERlZmF1bHRJbnRlcmZhY2 +VNZXRob2RzLmphdmFQSwUGAAAAAAcABwDOAQAAVgMAAAAA +"; + proj.Jars.Add (new AndroidItem.EmbeddedJar ("dim.jar") { + BinaryContent = () => Convert.FromBase64String (classesJarBase64) + }); + + proj.AndroidClassParser = classParser; + + proj.SetProperty ("EnableInterfaceMembersPreview", "True"); + proj.SetProperty ("LangVersion", "preview"); + + using (var b = CreateDllBuilder (Path.Combine ("temp", TestName), false, false)) { + proj.NuGetRestore (b.ProjectDirectory); + Assert.IsTrue (b.Build (proj), "Build should have succeeded."); + + string asmpath = Path.GetFullPath (Path.Combine (Path.GetDirectoryName (new Uri (GetType ().Assembly.CodeBase).LocalPath), b.ProjectDirectory, b.Output.OutputPath, (proj.AssemblyName ?? proj.ProjectName) + ".dll")); + Assert.IsTrue (File.Exists (asmpath), "assembly does not exist"); + + var cs = b.Output.GetIntermediaryAsText (Path.Combine ("generated", "src", "Com.Xamarin.Test.IDefaultInterfaceMethods.cs")); + Assert.IsTrue (cs.Contains ("int Quux ();"), "Quux not generated."); + Assert.IsTrue (cs.Contains ("virtual unsafe int Foo ()"), "Foo not generated."); + Assert.IsTrue (cs.Contains ("virtual unsafe int Bar {"), "Bar not generated."); + Assert.IsTrue (cs.Contains ("set {"), "(Baz) setter not generated."); + } + } } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets index 8afb3eac59e..bd25b5dcd9f 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets @@ -494,6 +494,8 @@ Copyright (C) 2012 Xamarin Inc. All rights reserved. ToolPath="$(MonoAndroidToolsDirectory)" ToolExe="$(BindingsGeneratorToolExe)" UseShortFileNames="$(UseShortGeneratorFileNames)" + LangVersion="$(LangVersion)" + EnableInterfaceMembersPreview="$(EnableInterfaceMembersPreview)" /> diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/DefaultMethodsInterface.java b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/DefaultMethodsInterface.java new file mode 100644 index 00000000000..cf390b6aa77 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/DefaultMethodsInterface.java @@ -0,0 +1,10 @@ +package com.xamarin.test; + +public interface DefaultMethodsInterface +{ + default int foo () { return 0; } + default int getBar () { return 2; } + default void setBar (int value) { } + default int toImplement () { throw new UnsupportedOperationException (); } + default int invokeFoo () { return foo (); } +} diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/EmptyOverrideClass.java b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/EmptyOverrideClass.java new file mode 100644 index 00000000000..d6b7e652086 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/EmptyOverrideClass.java @@ -0,0 +1,5 @@ +package com.xamarin.test; + +public class EmptyOverrideClass implements DefaultMethodsInterface +{ +} diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/ImplementedOverrideClass.java b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/ImplementedOverrideClass.java new file mode 100644 index 00000000000..c00088f92a4 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Jars/ImplementedOverrideClass.java @@ -0,0 +1,18 @@ +package com.xamarin.test; + +public class ImplementedOverrideClass implements DefaultMethodsInterface +{ + @Override + public int foo () { + return 6; + } + + @Override + public int getBar () { + return 100; + } + + @Override + public void setBar (int value) { + } +} diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Xamarin.Android.DefaultInterfaceMethods-Lib.csproj b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Xamarin.Android.DefaultInterfaceMethods-Lib.csproj new file mode 100644 index 00000000000..04893835362 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Lib/Xamarin.Android.DefaultInterfaceMethods-Lib.csproj @@ -0,0 +1,75 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {D360FDF3-F1CE-4698-9351-CC9D4502DF5C} + {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {77efb91c-a7e9-4b0e-a7c5-31eeec3c6d46} + Library + Properties + Xamarin.Android.DefaultInterfaceMethods_Lib + Xamarin.Android.DefaultInterfaceMethods-Lib + 512 + false + v9.0 + class-parse + XAJavaInterop1 + PackageReference + preview + True + <_JavacSourceVersion>1.8 + <_JavacTargetVersion>1.8 + + + true + portable + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + portable + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + Jars/dim-test.jar + + + + + + + + + + + + + + + BuildTestJarFile; + $(BuildDependsOn) + + + + + CleanTestJarFile; + $(CleanDependsOn); + + + \ No newline at end of file diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/DimBindingTests.cs b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/DimBindingTests.cs new file mode 100644 index 00000000000..0b7e3d422c6 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/DimBindingTests.cs @@ -0,0 +1,39 @@ +using System; +using Com.Xamarin.Test; +using Java.Lang; +using NUnit.Framework; + +namespace Xamarin.Android.DefaultInterfaceMethodsTests +{ + [TestFixture] + public class DimTest + { + [Test] + public void TestDefaultInterfaceMethods () + { + var empty = new EmptyOverrideClass (); + var iface = empty as IDefaultMethodsInterface; + + Assert.AreEqual (0, iface.Foo ()); + Assert.AreEqual (2, iface.Bar); + Assert.DoesNotThrow (() => iface.Bar = 5); + + Assert.AreEqual (0, iface.InvokeFoo ()); + + Assert.Throws (() => iface.ToImplement ()); + } + + [Test] + public void TestOverriddenDefaultInterfaceMethods () + { + var over = new ImplementedOverrideClass (); + var iface = over as IDefaultMethodsInterface; + + Assert.AreEqual (6, over.Foo ()); + Assert.AreEqual (100, over.Bar); + Assert.DoesNotThrow (() => over.Bar = 5); + + Assert.AreEqual (6, iface.InvokeFoo ()); + } + } +} diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/MainActivity.cs b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/MainActivity.cs new file mode 100644 index 00000000000..1e87fcce734 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/MainActivity.cs @@ -0,0 +1,18 @@ +using Android.App; +using Android.OS; +using Xamarin.Android.NUnitLite; +using System.Reflection; + +namespace Xamarin.Android.DefaultInterfaceMethods_Tests +{ + [Activity (Label = "Xamarin.Android.DefaultInterfaceMethods-Tests", MainLauncher = true)] + public class MainActivity : TestSuiteActivity + { + protected override void OnCreate (Bundle savedInstanceState) + { + AddTest (Assembly.GetExecutingAssembly ()); + + base.OnCreate (savedInstanceState); + } + } +} diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AndroidManifest.xml b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AndroidManifest.xml new file mode 100644 index 00000000000..e7d61cd89e3 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AssemblyInfo.cs b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..0b6017a0a40 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Xamarin.Android.DefaultInterfaceMethods_Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Xamarin.Android.DefaultInterfaceMethods_Tests")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/TestInstrumentation.cs b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/TestInstrumentation.cs new file mode 100644 index 00000000000..24f4cf84362 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/TestInstrumentation.cs @@ -0,0 +1,24 @@ +using System; +using System.Reflection; + +using Android.App; +using Android.Runtime; +using Xamarin.Android.NUnitLite; + +namespace Xamarin.Android.DefaultInterfaceMethods_Tests +{ + [Instrumentation (Name="xamarin.android.dimtests.TestInstrumentation")] + public class TestInstrumentation : TestSuiteInstrumentation { + + public TestInstrumentation (IntPtr handle, JniHandleOwnership transfer) + : base (handle, transfer) + { + } + + protected override void AddTests () + { + AddTest (Assembly.GetExecutingAssembly ()); + } + } +} + diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.csproj b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.csproj new file mode 100644 index 00000000000..7b3facf6049 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.csproj @@ -0,0 +1,83 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {8537F429-9AB2-49A4-9F7D-0654368D4361} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + Xamarin.Android.DefaultInterfaceMethods_Tests + Xamarin.Android.DefaultInterfaceMethods-Tests + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v9.0 + Properties\AndroidManifest.xml + Resources + Assets + true + true + Xamarin.Android.Net.AndroidClientHandler + + + + True + portable + False + ..\..\..\bin\TestDebug + DEBUG;TRACE + prompt + 4 + True + None + False + d8 + + + True + portable + True + ..\..\..\bin\TestRelease + TRACE + prompt + 4 + true + False + SdkOnly + True + d8 + + + + + + + + + + + + + + + + + + + + + + {d360fdf3-f1ce-4698-9351-cc9d4502df5c} + Xamarin.Android.DefaultInterfaceMethods-Lib + + + + + \ No newline at end of file diff --git a/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.targets b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.targets new file mode 100644 index 00000000000..bf44ef97f27 --- /dev/null +++ b/tests/CodeGen-Binding/Xamarin.Android.DefaultInterfaceMethods-Tests/Xamarin.Android.DefaultInterfaceMethods-Tests.targets @@ -0,0 +1,40 @@ + + + + <_PackageName>xamarin.android.defaultinterfacemethods_tests + + + + + xamarin.android.defaultinterfacemethods_tests + $(MSBuildThisFileDirectory)..\..\..\build-tools\scripts\TimingDefinitions.txt + $(MSBuildThisFileDirectory)..\..\..\TestResult-Xamarin.Android.Dim_Tests-times.csv + + + + + + xamarin.android.defaultinterfacemethods_tests + $(OutputPath)TestResult-Xamarin.Android.Dim_Tests.xml + + + + xamarin.android.defaultinterfacemethods_tests + + + + xamarin.android.defaultinterfacemethods_tests + + + + + + + + + + + + +