diff --git a/Makefile b/Makefile index 779525772..2caf68b97 100644 --- a/Makefile +++ b/Makefile @@ -161,21 +161,23 @@ run-test-jnimarshal: bin/Test$(CONFIGURATION)/Java.Interop.Export-Tests.dll bin/ GENERATOR_EXPECTED_TARGETS = tools/generator/Tests/expected.targets -# $(call GEN_CORE_OUTPUT, outdir) +# $(call GEN_CORE_OUTPUT, outdir, suffix, extra) define GEN_CORE_OUTPUT -$(RM) -Rf $(1) mkdir -p $(1) - $(RUNTIME) bin/Test$(CONFIGURATION)/generator.exe -o $(1) $(2) --api-level=20 tools/generator/Tests-Core/api.xml \ - --enummethods=tools/generator/Tests-Core/methods.xml \ - --enumfields=tools/generator/Tests-Core/fields.xml \ + $(RUNTIME) bin/Test$(CONFIGURATION)/generator.exe -o $(1) $(3) --api-level=20 tools/generator/Tests-Core/api$(2).xml \ + --enummethods=tools/generator/Tests-Core/methods$(2).xml \ + --enumfields=tools/generator/Tests-Core/fields$(2).xml \ --enumdir=$(1) endef run-test-generator-core: bin/Test$(CONFIGURATION)/generator.exe $(call GEN_CORE_OUTPUT,bin/Test$(CONFIGURATION)/generator-core) diff -rup tools/generator/Tests-Core/expected bin/Test$(CONFIGURATION)/generator-core - $(call GEN_CORE_OUTPUT,bin/Test$(CONFIGURATION)/generator-core,--codegen-target=JavaInterop1) + $(call GEN_CORE_OUTPUT,bin/Test$(CONFIGURATION)/generator-core,,--codegen-target=JavaInterop1) diff -rup tools/generator/Tests-Core/expected.ji bin/Test$(CONFIGURATION)/generator-core + $(call GEN_CORE_OUTPUT,bin/Test$(CONFIGURATION)/generator-core,-cp) + diff -rup tools/generator/Tests-Core/expected.cp bin/Test$(CONFIGURATION)/generator-core bin/Test$(CONFIGURATION)/generator.exe: bin/$(CONFIGURATION)/generator.exe cp $<* `dirname "$@"` diff --git a/src/Xamarin.Android.Tools.ApiXmlAdjuster/JavaApiNonBindableStripper.cs b/src/Xamarin.Android.Tools.ApiXmlAdjuster/JavaApiNonBindableStripper.cs new file mode 100644 index 000000000..f28f33063 --- /dev/null +++ b/src/Xamarin.Android.Tools.ApiXmlAdjuster/JavaApiNonBindableStripper.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Xamarin.Android.Tools.ApiXmlAdjuster +{ + public static class JavaApiNonBindableStripper + { + public static void StripNonBindables (this JavaApi api) + { + var invalids = new List (); + foreach (var member in api.Packages.SelectMany (p => p.Types) + .SelectMany (t => t.Members).Where (m => m.Name != null && m.Name.Contains ('$'))) + invalids.Add (member); + foreach (var invalid in invalids) + invalid.Parent.Members.Remove (invalid); + } + } +} diff --git a/src/Xamarin.Android.Tools.ApiXmlAdjuster/Xamarin.Android.Tools.ApiXmlAdjuster.csproj b/src/Xamarin.Android.Tools.ApiXmlAdjuster/Xamarin.Android.Tools.ApiXmlAdjuster.csproj index ce1e01293..8de86d226 100644 --- a/src/Xamarin.Android.Tools.ApiXmlAdjuster/Xamarin.Android.Tools.ApiXmlAdjuster.csproj +++ b/src/Xamarin.Android.Tools.ApiXmlAdjuster/Xamarin.Android.Tools.ApiXmlAdjuster.csproj @@ -42,6 +42,7 @@ + diff --git a/tools/generator/ApiXmlAdjuster.cs b/tools/generator/ApiXmlAdjuster.cs index 86d6249ca..c1833af56 100644 --- a/tools/generator/ApiXmlAdjuster.cs +++ b/tools/generator/ApiXmlAdjuster.cs @@ -23,6 +23,7 @@ public void Process (string inputXmlFile, GenBase [] gens, string outputXmlFile, var api = new JavaApi (); api.LoadReferences (gens); api.Load (inputXmlFile); + api.StripNonBindables (); api.Resolve (); api.CreateGenericInheritanceMapping (); api.MarkOverrides (); diff --git a/tools/generator/Tests-Core/api-cp.xml b/tools/generator/Tests-Core/api-cp.xml new file mode 100644 index 000000000..c20b00f98 --- /dev/null +++ b/tools/generator/Tests-Core/api-cp.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tools/generator/Tests-Core/expected.cp/GeneratedFiles.projitems b/tools/generator/Tests-Core/expected.cp/GeneratedFiles.projitems new file mode 100644 index 000000000..864450984 --- /dev/null +++ b/tools/generator/Tests-Core/expected.cp/GeneratedFiles.projitems @@ -0,0 +1,15 @@ + + + + $(DefineConstants);ANDROID_1;ANDROID_2;ANDROID_3;ANDROID_4;ANDROID_5;ANDROID_6;ANDROID_7;ANDROID_8;ANDROID_9;ANDROID_10;ANDROID_11;ANDROID_12;ANDROID_13;ANDROID_14;ANDROID_15;ANDROID_16;ANDROID_17;ANDROID_18;ANDROID_19;ANDROID_20 + + + + + + + + + + + \ No newline at end of file diff --git a/tools/generator/Tests-Core/expected.cp/Java.Interop.__TypeRegistrations.cs b/tools/generator/Tests-Core/expected.cp/Java.Interop.__TypeRegistrations.cs new file mode 100644 index 000000000..6008ae6da --- /dev/null +++ b/tools/generator/Tests-Core/expected.cp/Java.Interop.__TypeRegistrations.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using Android.Runtime; + +namespace Java.Interop { + + partial class __TypeRegistrations { + + public static void RegisterPackages () + { +#if MONODROID_TIMING + var start = DateTime.Now; + Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages start: " + (start - new DateTime (1970, 1, 1)).TotalMilliseconds); +#endif // def MONODROID_TIMING + Java.Interop.TypeManager.RegisterPackages ( + new string[]{ + }, + new Converter[]{ + }); +#if MONODROID_TIMING + var end = DateTime.Now; + Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages time: " + (end - new DateTime (1970, 1, 1)).TotalMilliseconds + " [elapsed: " + (end - start).TotalMilliseconds + " ms]"); +#endif // def MONODROID_TIMING + } + + static Type Lookup (string[] mappings, string javaType) + { + string managedType = Java.Interop.TypeManager.LookupTypeMapping (mappings, javaType); + if (managedType == null) + return null; + return Type.GetType (managedType); + } + } +} diff --git a/tools/generator/Tests-Core/expected.cp/Java.Lang.Object.cs b/tools/generator/Tests-Core/expected.cp/Java.Lang.Object.cs new file mode 100644 index 000000000..1aa80ac6b --- /dev/null +++ b/tools/generator/Tests-Core/expected.cp/Java.Lang.Object.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using Android.Runtime; + +namespace Java.Lang { + + // Metadata.xml XPath class reference: path="/api/package[@name='java.lang']/class[@name='Object']" + [global::Android.Runtime.Register ("java/lang/Object", DoNotGenerateAcw=true)] + public partial class Object { + + } +} diff --git a/tools/generator/Tests-Core/expected.cp/Xamarin.Test.Invalidnames.InvalidNameMembers.cs b/tools/generator/Tests-Core/expected.cp/Xamarin.Test.Invalidnames.InvalidNameMembers.cs new file mode 100644 index 000000000..8ba4a64f6 --- /dev/null +++ b/tools/generator/Tests-Core/expected.cp/Xamarin.Test.Invalidnames.InvalidNameMembers.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using Android.Runtime; + +namespace Xamarin.Test.Invalidnames { + + // Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test.invalidnames']/class[@name='InvalidNameMembers']" + [global::Android.Runtime.Register ("xamarin/test/invalidnames/InvalidNameMembers", DoNotGenerateAcw=true)] + public partial class InvalidNameMembers : Java.Lang.Object { + + protected InvalidNameMembers (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {} + + } +} diff --git a/tools/generator/Tests-Core/expected.cp/__NamespaceMapping__.cs b/tools/generator/Tests-Core/expected.cp/__NamespaceMapping__.cs new file mode 100644 index 000000000..2e1ecf614 --- /dev/null +++ b/tools/generator/Tests-Core/expected.cp/__NamespaceMapping__.cs @@ -0,0 +1,2 @@ +[assembly:global::Android.Runtime.NamespaceMapping (Java = "java.lang", Managed="Java.Lang")] +[assembly:global::Android.Runtime.NamespaceMapping (Java = "xamarin.test.invalidnames", Managed="Xamarin.Test.Invalidnames")] diff --git a/tools/generator/Tests-Core/expected.cp/enumlist b/tools/generator/Tests-Core/expected.cp/enumlist new file mode 100644 index 000000000..e69de29bb diff --git a/tools/generator/Tests-Core/fields-cp.xml b/tools/generator/Tests-Core/fields-cp.xml new file mode 100644 index 000000000..39c8ee64c --- /dev/null +++ b/tools/generator/Tests-Core/fields-cp.xml @@ -0,0 +1,3 @@ + + + diff --git a/tools/generator/Tests-Core/methods-cp.xml b/tools/generator/Tests-Core/methods-cp.xml new file mode 100644 index 000000000..0819df5f1 --- /dev/null +++ b/tools/generator/Tests-Core/methods-cp.xml @@ -0,0 +1,3 @@ + + +