You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes: #1159
Context: c93fea0
`jnimarshalmethod-gen` is intended to generate marshal methods for
any type that that:
* Has `[JavaCallable]` (tested in `Java.Interop.Export-Tests.dll`
and c93fea0), or
* Overrides a `virtual` method which has `[JniMethodSignature]`, or
* Implements an interface method which has `[JniMethodSignature]`.
Thus, the intention was that it should generate marshal methods for
`Java.Base-Tests`:
% dotnet bin/Debug-net7.0/jnimarshalmethod-gen.dll -v bin/TestDebug-net7.0/Java.Base-Tests.dll
Unable to read assembly 'bin/TestDebug-net7.0/Java.Base-Tests.dll' with symbols. Retrying to load it without them.
Preparing marshal method assembly 'Java.Base-Tests-JniMarshalMethods'
Processing Java.BaseTests.JavaInvoker type
Processing Java.BaseTests.MyRunnable type
Processing Java.BaseTests.MyIntConsumer type
Marshal method assembly 'Java.Base-Tests-JniMarshalMethods' created
Notably missing? No messages stating:
Adding marshal method for …
Also missing? `ikdasm bin/TestDebug-net7.0/Java.Base-Tests.dll`
showed that there were no `__RegisterNativeMembers()` methods emitted.
The `jnimarshalmethod-gen` invocation was a no-op!
The problems were twofold:
1. It was only looking for methods with
`Android.Runtime.RegisterAttribute`. This was useful for
Xamarin.Android (when we were trying to make it work), but
doesn't work with Java.Base. We need to *also* look for
`Java.Interop.JniMethodSignature`.
Relatedly, the attempt to use
`registerAttribute.Constructor.Parameters` to determine parameter
names didn't work; the parameter name was always `""`.
2. A'la c93fea0, we need to ensure that the Java `native` methods
we register are consistent with `jcw-gen` output.
Fix these two problems, which allows `jnimarshalmethod-gen` to now
emit marshal methods for types within `Java.Base-Tests.dll`.
Additionally, rework the `jnimarshalmethod-gen -f` logic to *remove*
the existing `__<$>_jni_marshal_methods` nested type when present.
Log(TraceLevel.Verbose,$"## Dumping contents of marshal method for `{td.FullName}::{method.Name}({string.Join(", ",method.GetParameters().Select(p =>p.ParameterType))})`:");
0 commit comments