Skip to content

Commit be6cc8f

Browse files
authored
[Java.Interop] Add JniTypeSignatureAttribute.InvokerType (#1284)
Context: #1263 Context: #1263 (comment) We want the default trimmer infrastructure to be able to automatically preserve the `*Invoker` types which are required for interacting with `abstract` classes and interfaces. The most straightforward way to do this is to add a new `InvokerType` property to `JniTypeSignatureAttribute` (and eventually `RegisterAttribute`): partial class JniTypeSignatureAttribute { [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] public Type? InvokerType {get; set;} } Update `generator` so that `generator --codegen-target=JavaInterop1` output sets this new property on abstract classes and interfaces: namespace Java.Lang { [Java.Interop.JniTypeSignatureAttribute("java/lang/Runnable", GenerateJavaPeer=false, InvokerType=typeof(Java.Lang.IRunnableInvoker))] public partial interface IRunnable { } internal partial class IRunnableInvoker { } [Java.Interop.JniTypeSignatureAttribute("java/lang/Number", GenerateJavaPeer=false, InvokerType=typeof(Java.Lang.NumberInvoker))] public abstract partial class Number { } internal partial class NumberInvoker { } } This allows the default trimmer to automatically preserve the `*Invoker` type and constructors. Update `Java.Interop.JniRuntime.JniValueManager` to no longer look for `*Invoker` types "by string", and instead require use of the `JniTypeSignatureAttribute.InvokerType` property. Update unit tests and expected output so that everything works.
1 parent 619286d commit be6cc8f

37 files changed

+203
-201
lines changed

src/Java.Base-ref.cs

+147-147
Large diffs are not rendered by default.

src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs

+8-19
Original file line numberDiff line numberDiff line change
@@ -386,18 +386,9 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type)
386386
[return: DynamicallyAccessedMembers (Constructors)]
387387
static Type? GetInvokerType (Type type)
388388
{
389-
const string suffix = "Invoker";
390-
391389
// https://github.com/xamarin/xamarin-android/blob/5472eec991cc075e4b0c09cd98a2331fb93aa0f3/src/Microsoft.Android.Sdk.ILLink/MarkJavaObjects.cs#L176-L186
392-
const string assemblyGetTypeMessage = "'Invoker' types are preserved by the MarkJavaObjects trimmer step.";
393390
const string makeGenericTypeMessage = "Generic 'Invoker' types are preserved by the MarkJavaObjects trimmer step.";
394391

395-
[UnconditionalSuppressMessage ("Trimming", "IL2026", Justification = assemblyGetTypeMessage)]
396-
[UnconditionalSuppressMessage ("Trimming", "IL2073", Justification = assemblyGetTypeMessage)]
397-
[return: DynamicallyAccessedMembers (Constructors)]
398-
static Type? AssemblyGetType (Assembly assembly, string typeName) =>
399-
assembly.GetType (typeName);
400-
401392
[UnconditionalSuppressMessage ("Trimming", "IL2055", Justification = makeGenericTypeMessage)]
402393
[return: DynamicallyAccessedMembers (Constructors)]
403394
static Type MakeGenericType (
@@ -409,18 +400,16 @@ static Type MakeGenericType (
409400
type.MakeGenericType (arguments);
410401
#pragma warning restore IL3050
411402

403+
var signature = type.GetCustomAttribute<JniTypeSignatureAttribute> ();
404+
if (signature == null || signature.InvokerType == null) {
405+
return null;
406+
}
407+
412408
Type[] arguments = type.GetGenericArguments ();
413409
if (arguments.Length == 0)
414-
return AssemblyGetType (type.Assembly, type + suffix);
415-
Type definition = type.GetGenericTypeDefinition ();
416-
int bt = definition.FullName!.IndexOf ("`", StringComparison.Ordinal);
417-
if (bt == -1)
418-
throw new NotSupportedException ("Generic type doesn't follow generic type naming convention! " + type.FullName);
419-
Type? suffixDefinition = AssemblyGetType (definition.Assembly,
420-
definition.FullName.Substring (0, bt) + suffix + definition.FullName.Substring (bt));
421-
if (suffixDefinition == null)
422-
return null;
423-
return MakeGenericType (suffixDefinition, arguments);
410+
return signature.InvokerType;
411+
412+
return MakeGenericType (signature.InvokerType, arguments);
424413
}
425414

426415
public object? CreateValue (

src/Java.Interop/Java.Interop/JniTypeSignatureAttribute.cs

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#nullable enable
22

33
using System;
4+
using System.Diagnostics.CodeAnalysis;
45

56
namespace Java.Interop
67
{
@@ -31,6 +32,9 @@ public int ArrayRank {
3132
}
3233

3334
public bool GenerateJavaPeer {get; set;}
35+
36+
[DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
37+
public Type? InvokerType {get; set;}
3438
}
3539
}
3640

src/Java.Interop/PublicAPI.Unshipped.txt

+2
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ static Java.Interop.JniEnvironment.BeginMarshalMethod(nint jnienv, out Java.Inte
33
static Java.Interop.JniEnvironment.EndMarshalMethod(ref Java.Interop.JniTransition transition) -> void
44
virtual Java.Interop.JniRuntime.OnEnterMarshalMethod() -> void
55
virtual Java.Interop.JniRuntime.OnUserUnhandledException(ref Java.Interop.JniTransition transition, System.Exception! e) -> void
6+
Java.Interop.JniTypeSignatureAttribute.InvokerType.get -> System.Type?
7+
Java.Interop.JniTypeSignatureAttribute.InvokerType.set -> void

tests/Java.Interop-Tests/Java.Interop/JavaPeerableExtensionsTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public unsafe MyJavaInterfaceImpl ()
8080
}
8181
}
8282

83-
[JniTypeSignature (JniTypeName, GenerateJavaPeer=false)]
83+
[JniTypeSignature (JniTypeName, GenerateJavaPeer=false, InvokerType=typeof(IJavaInterfaceInvoker))]
8484
interface IJavaInterface : IJavaPeerable {
8585
internal const string JniTypeName = "net/dot/jni/test/JavaInterface";
8686

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/JavaInterop1/WriteDuplicateInterfaceEventArgs.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Metadata.xml XPath interface reference: path="/api/package[@name='java.code']/interface[@name='AnimatorListener']"
2-
[global::Java.Interop.JniTypeSignature ("java/code/AnimatorListener", GenerateJavaPeer=false)]
2+
[global::Java.Interop.JniTypeSignature ("java/code/AnimatorListener", GenerateJavaPeer=false, InvokerType=typeof (java.code.AnimatorListenerInvoker))]
33
public partial interface AnimatorListener : IJavaPeerable {
44
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/interface[@name='AnimatorListener']/method[@name='OnAnimationEnd' and count(parameter)=1 and parameter[1][@type='int']]"
55
[global::Java.Interop.JniMethodSignature ("OnAnimationEnd", "(I)Z")]

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/JavaInterop1/WriteInterface.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Metadata.xml XPath interface reference: path="/api/package[@name='java.code']/interface[@name='IMyInterface']"
2-
[global::Java.Interop.JniTypeSignature ("java/code/IMyInterface", GenerateJavaPeer=false)]
2+
[global::Java.Interop.JniTypeSignature ("java/code/IMyInterface", GenerateJavaPeer=false, InvokerType=typeof (java.code.IMyInterfaceInvoker))]
33
public partial interface IMyInterface : IJavaPeerable {
44
private static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterface), isInterface: true);
55

tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.IExtendedInterface.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Xamarin.Test {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='ExtendedInterface']"
8-
[global::Java.Interop.JniTypeSignature ("xamarin/test/ExtendedInterface", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("xamarin/test/ExtendedInterface", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.IExtendedInterfaceInvoker))]
99
public partial interface IExtendedInterface : IJavaPeerable {
1010
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/interface[@name='ExtendedInterface']/method[@name='extendedMethod' and count(parameter)=0]"
1111
[global::Java.Interop.JniMethodSignature ("extendedMethod", "()V")]

tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.PublicClass.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace Xamarin.Test {
1818
[global::Java.Interop.JniTypeSignature ("xamarin/test/PublicClass", GenerateJavaPeer=false)]
1919
public partial class PublicClass : global::Java.Lang.Object {
2020
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='PublicClass.ProtectedInterface']"
21-
[global::Java.Interop.JniTypeSignature ("xamarin/test/PublicClass$ProtectedInterface", GenerateJavaPeer=false)]
21+
[global::Java.Interop.JniTypeSignature ("xamarin/test/PublicClass$ProtectedInterface", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.PublicClass.IProtectedInterfaceInvoker))]
2222
protected internal partial interface IProtectedInterface : IJavaPeerable {
2323
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/interface[@name='PublicClass.ProtectedInterface']/method[@name='foo' and count(parameter)=0]"
2424
[global::Java.Interop.JniMethodSignature ("foo", "()V")]

tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.AbsSpinner.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Xamarin.Test {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='AbsSpinner']"
18-
[global::Java.Interop.JniTypeSignature ("xamarin/test/AbsSpinner", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("xamarin/test/AbsSpinner", GenerateJavaPeer=false, InvokerType=typeof (AbsSpinnerInvoker))]
1919
public abstract partial class AbsSpinner : Xamarin.Test.AdapterView<Xamarin.Test.ISpinnerAdapter> {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/AbsSpinner", typeof (AbsSpinner));
2121

tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.AdapterView.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Xamarin.Test {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='AdapterView']"
18-
[global::Java.Interop.JniTypeSignature ("xamarin/test/AdapterView", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("xamarin/test/AdapterView", GenerateJavaPeer=false, InvokerType=typeof (AdapterViewInvoker))]
1919
[global::Java.Interop.JavaTypeParameters (new string [] {"T extends xamarin.test.Adapter"})]
2020
public abstract partial class AdapterView : global::Java.Lang.Object {
2121
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/AdapterView", typeof (AdapterView));

tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.IAdapter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Xamarin.Test {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='Adapter']"
8-
[global::Java.Interop.JniTypeSignature ("xamarin/test/Adapter", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("xamarin/test/Adapter", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.IAdapterInvoker))]
99
public partial interface IAdapter : IJavaPeerable {
1010
}
1111

tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.ISpinnerAdapter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Xamarin.Test {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='SpinnerAdapter']"
8-
[global::Java.Interop.JniTypeSignature ("xamarin/test/SpinnerAdapter", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("xamarin/test/SpinnerAdapter", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.ISpinnerAdapterInvoker))]
99
public partial interface ISpinnerAdapter : global::Xamarin.Test.IAdapter {
1010
}
1111

tests/generator-Tests/expected.ji/Android.Graphics.Color/Xamarin.Test.SomeObject.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Xamarin.Test {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='SomeObject']"
18-
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject", GenerateJavaPeer=false, InvokerType=typeof (SomeObjectInvoker))]
1919
public abstract partial class SomeObject : global::Java.Lang.Object {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/SomeObject", typeof (SomeObject));
2121

tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.II1.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Xamarin.Test {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='I1']"
8-
[global::Java.Interop.JniTypeSignature ("xamarin/test/I1", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("xamarin/test/I1", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.II1Invoker))]
99
public partial interface II1 : IJavaPeerable {
1010
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/interface[@name='I1']/method[@name='close' and count(parameter)=0]"
1111
[global::Java.Interop.JniMethodSignature ("close", "()V")]

tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.II2.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Xamarin.Test {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='I2']"
8-
[global::Java.Interop.JniTypeSignature ("xamarin/test/I2", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("xamarin/test/I2", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.II2Invoker))]
99
public partial interface II2 : IJavaPeerable {
1010
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/interface[@name='I2']/method[@name='close' and count(parameter)=0]"
1111
[global::Java.Interop.JniMethodSignature ("close", "()V")]

tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.SomeObject2.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Xamarin.Test {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='SomeObject2']"
18-
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject2", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject2", GenerateJavaPeer=false, InvokerType=typeof (SomeObject2Invoker))]
1919
public abstract partial class SomeObject2 : global::Java.Lang.Object, global::Xamarin.Test.II1, global::Xamarin.Test.II2 {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/SomeObject2", typeof (SomeObject2));
2121

tests/generator-Tests/expected.ji/NestedTypes/Xamarin.Test.NotificationCompatBase.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ namespace Xamarin.Test {
1818
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase", GenerateJavaPeer=false)]
1919
public partial class NotificationCompatBase : global::Java.Lang.Object {
2020
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='NotificationCompatBase.Action']"
21-
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$Action", GenerateJavaPeer=false)]
21+
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$Action", GenerateJavaPeer=false, InvokerType=typeof (ActionInvoker))]
2222
public abstract partial class Action : global::Java.Lang.Object {
2323
// Metadata.xml XPath interface reference: path="/api/package[@name='xamarin.test']/interface[@name='NotificationCompatBase.Action.Factory']"
24-
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$Action$Factory", GenerateJavaPeer=false)]
24+
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$Action$Factory", GenerateJavaPeer=false, InvokerType=typeof (Xamarin.Test.NotificationCompatBase.Action.IFactoryInvoker))]
2525
public partial interface IFactory : IJavaPeerable {
2626
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/interface[@name='NotificationCompatBase.Action.Factory']/method[@name='build' and count(parameter)=1 and parameter[1][@type='int']]"
2727
[global::Java.Interop.JniMethodSignature ("build", "(I)Lxamarin/test/NotificationCompatBase$Action;")]
@@ -88,7 +88,7 @@ public ActionInvoker (ref JniObjectReference reference, JniObjectReferenceOption
8888
}
8989

9090
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='NotificationCompatBase.InstanceInner']"
91-
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$InstanceInner", GenerateJavaPeer=false)]
91+
[global::Java.Interop.JniTypeSignature ("xamarin/test/NotificationCompatBase$InstanceInner", GenerateJavaPeer=false, InvokerType=typeof (InstanceInnerInvoker))]
9292
public abstract partial class InstanceInner : global::Java.Lang.Object {
9393
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/NotificationCompatBase$InstanceInner", typeof (InstanceInner));
9494

tests/generator-Tests/expected.ji/NormalProperties/Xamarin.Test.SomeObject.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Xamarin.Test {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='SomeObject']"
18-
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("xamarin/test/SomeObject", GenerateJavaPeer=false, InvokerType=typeof (SomeObjectInvoker))]
1919
public abstract partial class SomeObject : global::Java.Lang.Object {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("xamarin/test/SomeObject", typeof (SomeObject));
2121

tests/generator-Tests/expected.ji/ParameterXPath/Java.Util.IList.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Java.Util {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='java.util']/interface[@name='List']"
8-
[global::Java.Interop.JniTypeSignature ("java/util/List", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("java/util/List", GenerateJavaPeer=false, InvokerType=typeof (Java.Util.IListInvoker))]
99
[global::Java.Interop.JavaTypeParameters (new string [] {"E"})]
1010
public partial interface IList : IJavaPeerable {
1111
}

tests/generator-Tests/expected.ji/Streams/Java.IO.IOException.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Java.IO {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='java.io']/class[@name='IOException']"
18-
[global::Java.Interop.JniTypeSignature ("java/io/IOException", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("java/io/IOException", GenerateJavaPeer=false, InvokerType=typeof (IOExceptionInvoker))]
1919
public abstract partial class IOException : global::Java.Lang.Throwable {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("java/io/IOException", typeof (IOException));
2121

tests/generator-Tests/expected.ji/Streams/Java.IO.InputStream.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Java.IO {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='java.io']/class[@name='InputStream']"
18-
[global::Java.Interop.JniTypeSignature ("java/io/InputStream", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("java/io/InputStream", GenerateJavaPeer=false, InvokerType=typeof (InputStreamInvoker))]
1919
public abstract partial class InputStream : global::Java.Lang.Object {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("java/io/InputStream", typeof (InputStream));
2121

tests/generator-Tests/expected.ji/Streams/Java.IO.OutputStream.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
namespace Java.IO {
1616

1717
// Metadata.xml XPath class reference: path="/api/package[@name='java.io']/class[@name='OutputStream']"
18-
[global::Java.Interop.JniTypeSignature ("java/io/OutputStream", GenerateJavaPeer=false)]
18+
[global::Java.Interop.JniTypeSignature ("java/io/OutputStream", GenerateJavaPeer=false, InvokerType=typeof (OutputStreamInvoker))]
1919
public abstract partial class OutputStream : global::Java.Lang.Object {
2020
static readonly JniPeerMembers _members = new JniPeerMembers ("java/io/OutputStream", typeof (OutputStream));
2121

tests/generator-Tests/expected.ji/TestInterface/ClassWithoutNamespace.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
using Java.Interop;
1414

1515
// Metadata.xml XPath class reference: path="/api/package[@name='']/class[@name='ClassWithoutNamespace']"
16-
[global::Java.Interop.JniTypeSignature ("ClassWithoutNamespace", GenerateJavaPeer=false)]
16+
[global::Java.Interop.JniTypeSignature ("ClassWithoutNamespace", GenerateJavaPeer=false, InvokerType=typeof (ClassWithoutNamespaceInvoker))]
1717
public abstract partial class ClassWithoutNamespace : global::Java.Lang.Object, IInterfaceWithoutNamespace {
1818
static readonly JniPeerMembers _members = new JniPeerMembers ("ClassWithoutNamespace", typeof (ClassWithoutNamespace));
1919

tests/generator-Tests/expected.ji/TestInterface/IInterfaceWithoutNamespace.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using Java.Interop;
44

55
// Metadata.xml XPath interface reference: path="/api/package[@name='']/interface[@name='InterfaceWithoutNamespace']"
6-
[global::Java.Interop.JniTypeSignature ("InterfaceWithoutNamespace", GenerateJavaPeer=false)]
6+
[global::Java.Interop.JniTypeSignature ("InterfaceWithoutNamespace", GenerateJavaPeer=false, InvokerType=typeof (IInterfaceWithoutNamespaceInvoker))]
77
public partial interface IInterfaceWithoutNamespace : IJavaPeerable {
88
// Metadata.xml XPath method reference: path="/api/package[@name='']/interface[@name='InterfaceWithoutNamespace']/method[@name='Foo' and count(parameter)=0]"
99
[global::Java.Interop.JniMethodSignature ("Foo", "()V")]

tests/generator-Tests/expected.ji/TestInterface/Java.Util.ICollection.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Java.Util {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='java.util']/interface[@name='Collection']"
8-
[global::Java.Interop.JniTypeSignature ("java/util/Collection", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("java/util/Collection", GenerateJavaPeer=false, InvokerType=typeof (Java.Util.ICollectionInvoker))]
99
[global::Java.Interop.JavaTypeParameters (new string [] {"E"})]
1010
public partial interface ICollection : IJavaPeerable {
1111
// Metadata.xml XPath method reference: path="/api/package[@name='java.util']/interface[@name='Collection']/method[@name='add' and count(parameter)=1 and parameter[1][@type='E']]"

tests/generator-Tests/expected.ji/TestInterface/Java.Util.IDeque.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Java.Util {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='java.util']/interface[@name='Deque']"
8-
[global::Java.Interop.JniTypeSignature ("java/util/Deque", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("java/util/Deque", GenerateJavaPeer=false, InvokerType=typeof (Java.Util.IDequeInvoker))]
99
[global::Java.Interop.JavaTypeParameters (new string [] {"E"})]
1010
public partial interface IDeque : global::Java.Util.IQueue {
1111
// Metadata.xml XPath method reference: path="/api/package[@name='java.util']/interface[@name='Deque']/method[@name='add' and count(parameter)=1 and parameter[1][@type='E']]"

tests/generator-Tests/expected.ji/TestInterface/Java.Util.IQueue.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Java.Util {
66

77
// Metadata.xml XPath interface reference: path="/api/package[@name='java.util']/interface[@name='Queue']"
8-
[global::Java.Interop.JniTypeSignature ("java/util/Queue", GenerateJavaPeer=false)]
8+
[global::Java.Interop.JniTypeSignature ("java/util/Queue", GenerateJavaPeer=false, InvokerType=typeof (Java.Util.IQueueInvoker))]
99
[global::Java.Interop.JavaTypeParameters (new string [] {"E"})]
1010
public partial interface IQueue : global::Java.Util.ICollection {
1111
// Metadata.xml XPath method reference: path="/api/package[@name='java.util']/interface[@name='Queue']/method[@name='add' and count(parameter)=1 and parameter[1][@type='E']]"

0 commit comments

Comments
 (0)