From 31572febc35a0696e0a504db9253bd2195917f0c Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Fri, 18 Sep 2020 10:11:54 +0200 Subject: [PATCH] [jnimarshalmethod-gen] Fix registration on Windows Set parameters to registration method builder, to get rid of exception we are getting on Windows. Looks like the S.L.E code still differs between Windows and Mac. Also report adding registration methods in verbose mode, similar as we do with marshal methods. The ArgumentOutOfRangeException mentined above: error JM4006: jnimarshalmethod-gen: Unable to process assembly '.\bin\TestDebug\Java.Interop.Export-Tests.dll' Specified argument was out of the range of valid values. Parameter name: The specified parameter index is not in range. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: The specified parameter index is not in range. at System.Reflection.Emit.MethodBuilder.DefineParameter(Int32 position, ParameterAttributes attributes, String strParamName) at System.Linq.Expressions.Compiler.LambdaCompiler..ctor(AnalyzedTree tree, LambdaExpression lambda, MethodBuilder method) at System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, MethodBuilder method, DebugInfoGenerator debugInfoGenerator) at Xamarin.Android.Tools.JniMarshalMethodGenerator.App.AddRegisterNativeMembers(TypeBuilder dt, ParameterExpression targetType, List`1 registrationElements) in C:\Users\rodo\git\java.interop\tools\jnimarshalmethod-gen\App.cs:line 564 at Xamarin.Android.Tools.JniMarshalMethodGenerator.App.CreateMarshalMethodAssembly(String path) in C:\Users\rodo\git\java.interop\tools\jnimarshalmethod-gen\App.cs:line 426 at Xamarin.Android.Tools.JniMarshalMethodGenerator.App.ProcessAssemblies(List`1 assemblies) in C:\Users\rodo\git\java.interop\tools\jnimarshalmethod-gen\App.cs:line 201 --- tools/jnimarshalmethod-gen/App.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/jnimarshalmethod-gen/App.cs b/tools/jnimarshalmethod-gen/App.cs index e3ad1710f..febb7f26a 100644 --- a/tools/jnimarshalmethod-gen/App.cs +++ b/tools/jnimarshalmethod-gen/App.cs @@ -489,8 +489,12 @@ static Expression CreateRegistration (string method, string signature, LambdaExp static void AddRegisterNativeMembers (TypeBuilder dt, ParameterExpression targetType, List registrationElements) { - var args = Expression.Parameter (typeof (JniNativeMethodRegistrationArguments), "args"); + if (Verbose) { + Console.Write ("Adding registration method for "); + ColorWriteLine ($"{dt.FullName}", ConsoleColor.Green); + } + var args = Expression.Parameter (typeof (JniNativeMethodRegistrationArguments), "args"); var body = Expression.Block ( new[]{targetType}, Expression.Assign (targetType, Expression.Call (Type_GetType, Expression.Constant (dt.FullName))), @@ -500,6 +504,7 @@ static void AddRegisterNativeMembers (TypeBuilder dt, ParameterExpression target var rb = dt.DefineMethod ("__RegisterNativeMembers", System.Reflection.MethodAttributes.Public | System.Reflection.MethodAttributes.Static); + rb.SetParameters (typeof (JniNativeMethodRegistrationArguments)); rb.SetCustomAttribute (new CustomAttributeBuilder (typeof (JniAddNativeMethodRegistrationAttribute).GetConstructor (Type.EmptyTypes), new object[0])); #if _DUMP_REGISTER_NATIVE_MEMBERS Console.WriteLine ($"## Dumping contents of `{dt.FullName}::__RegisterNativeMembers`: ");