From 7d8375f55e155423690dd4fec873db067be90901 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Mon, 5 Feb 2024 08:22:51 -1000 Subject: [PATCH 1/4] =?UTF-8?q?=EF=BB=BFTest=20JI=20#1174.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external/Java.Interop | 2 +- .../Tasks/GenerateJavaStubs.cs | 24 +++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/external/Java.Interop b/external/Java.Interop index 7d1e7057cf4..16e9711965a 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 7d1e7057cf4b0adcf65e7064186326dafce11b72 +Subproject commit 16e9711965ae30c57b566121d4ce62d985b853b0 diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs index 6a0444e872b..a345ed8261e 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 { @@ -473,23 +474,32 @@ 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 reader_options = new CallableWrapperReaderOptions { + DefaultApplicationJavaClass = ApplicationJavaClass, + DefaultGenerateOnCreateOverrides = generateOnCreateOverrides, + DefaultMonoRuntimeInitialization = monoInit, + MethodClassifier = classifier, }; - jti.Generate (writer); + var jcw_type = CecilImporter.CreateType (t, cache, reader_options); + + var writer_options = new CallableWrapperWriterOptions { + CodeGenerationTarget = JavaPeerStyle.XAJavaInterop1 + }; + + jcw_type.Generate (writer, writer_options); + 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; From 45d4b88d35068c850ccd76816423120b0e94da26 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Tue, 20 Feb 2024 14:15:48 -0500 Subject: [PATCH 2/4] Bump to xamarin/java.interop@0431ac10. Hopefully fixes the IL2035 warnings in CI. --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index 16e9711965a..0431ac10194 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 16e9711965ae30c57b566121d4ce62d985b853b0 +Subproject commit 0431ac10194c2e66a32d79e4c6111087b551d0d2 From b87b84475ed543c2866d69cafa15a0fd4501dc47 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Wed, 21 Feb 2024 10:24:18 -0500 Subject: [PATCH 3/4] Bump to xamarin/java.interop/main@c825dcad --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index 0431ac10194..c825dcad8e7 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 0431ac10194c2e66a32d79e4c6111087b551d0d2 +Subproject commit c825dcad8e7fe2e1ba5846a592a02f6a578db991 From 7e7ba1e57b892332397323703da5f9be52c40b76 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Wed, 21 Feb 2024 10:35:59 -0500 Subject: [PATCH 4/4] hoist reader_options, writer_options out of the loop. There's no need to constantly create these values. --- .../Tasks/GenerateJavaStubs.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs index a345ed8261e..453885d1758 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs @@ -464,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 @@ -474,19 +484,8 @@ bool CreateJavaSources (IEnumerable newJavaTypes, TypeDefinitionCache using (var writer = MemoryStreamPool.Shared.CreateStreamWriter ()) { try { - var reader_options = new CallableWrapperReaderOptions { - DefaultApplicationJavaClass = ApplicationJavaClass, - DefaultGenerateOnCreateOverrides = generateOnCreateOverrides, - DefaultMonoRuntimeInitialization = monoInit, - MethodClassifier = classifier, - }; - var jcw_type = CecilImporter.CreateType (t, cache, reader_options); - var writer_options = new CallableWrapperWriterOptions { - CodeGenerationTarget = JavaPeerStyle.XAJavaInterop1 - }; - jcw_type.Generate (writer, writer_options); if (useMarshalMethods) {