diff --git a/external/Java.Interop b/external/Java.Interop index ae6560976d7..c825dcad8e7 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit ae6560976d7a8d20ae18bed96e33ae6a2fc5c754 +Subproject commit c825dcad8e7fe2e1ba5846a592a02f6a578db991 diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs index 6a0444e872b..453885d1758 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs @@ -20,6 +20,7 @@ using Xamarin.Android.Tools; using Microsoft.Android.Build.Tasks; +using Java.Interop.Tools.JavaCallableWrappers.Adapters; namespace Xamarin.Android.Tasks { @@ -463,6 +464,16 @@ bool CreateJavaSources (IEnumerable newJavaTypes, TypeDefinitionCache bool hasExportReference = ResolvedAssemblies.Any (assembly => Path.GetFileName (assembly.ItemSpec) == "Mono.Android.Export.dll"); bool generateOnCreateOverrides = int.Parse (AndroidSdkPlatform) <= 10; + var reader_options = new CallableWrapperReaderOptions { + DefaultApplicationJavaClass = ApplicationJavaClass, + DefaultGenerateOnCreateOverrides = generateOnCreateOverrides, + DefaultMonoRuntimeInitialization = monoInit, + MethodClassifier = classifier, + }; + var writer_options = new CallableWrapperWriterOptions { + CodeGenerationTarget = JavaPeerStyle.XAJavaInterop1 + }; + bool ok = true; foreach (JavaType jt in newJavaTypes) { TypeDefinition t = jt.Type; // JCW generator doesn't care about ABI-specific types or token ids @@ -473,23 +484,21 @@ bool CreateJavaSources (IEnumerable newJavaTypes, TypeDefinitionCache using (var writer = MemoryStreamPool.Shared.CreateStreamWriter ()) { try { - var jti = new JavaCallableWrapperGenerator (t, Log.LogWarning, cache, classifier) { - GenerateOnCreateOverrides = generateOnCreateOverrides, - ApplicationJavaClass = ApplicationJavaClass, - MonoRuntimeInitialization = monoInit, - }; + var jcw_type = CecilImporter.CreateType (t, cache, reader_options); + + jcw_type.Generate (writer, writer_options); - jti.Generate (writer); if (useMarshalMethods) { if (classifier.FoundDynamicallyRegisteredMethods (t)) { Log.LogWarning ($"Type '{t.GetAssemblyQualifiedName (cache)}' will register some of its Java override methods dynamically. This may adversely affect runtime performance. See preceding warnings for names of dynamically registered methods."); } } + writer.Flush (); - var path = jti.GetDestinationPath (outputPath); + var path = jcw_type.GetDestinationPath (outputPath); Files.CopyIfStreamChanged (writer.BaseStream, path); - if (jti.HasExport && !hasExportReference) + if (jcw_type.HasExport && !hasExportReference) Diagnostic.Error (4210, Properties.Resources.XA4210); } catch (XamarinAndroidException xae) { ok = false;