Skip to content

Commit 430cf97

Browse files
committed
"Fully qualify" member names.
A concern with *just* using the interface name is when the same interface name exists in multiple packages, and you're implementing *all* of them: package p1; public interface List {} package p2; public interface List {} package example; public interface MyList implements p1.List, p2.List {} With this API, the interface invoker for `IMyListInvoker` would try to emit `_members_List` *twice*, which is a good way to get compilation errors. To avoid this, we could *hash* the package name + type name, as we do with Java Callable Wrappers, but if you see `_members_hash1` vs. `_members_hash2`, it's difficult to review what's going on. Instead, use the full Java-side name, "mangled" so that it can be an identifier. This results in: partial class IMyListInvoker : Java.Lang.Object, IMyList { static readonly JniPeerMembers _members_p1_List = …; static readonly JniPeerMembers _members_p2_List = …; static readonly JniPeerMembers _members_example_MyList = … } This can result in long member names, but we should be well within C# language limits (512 characters?), and it's readable!
1 parent 7f77a70 commit 430cf97

30 files changed

+176
-159
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ internal partial class AnimatorListenerInvoker : global::Java.Lang.Object, Anima
1616
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
1717
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
1818
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
19-
get { return _members_AnimatorListener; }
19+
get { return _members_java_code_AnimatorListener; }
2020
}
2121

22-
static readonly JniPeerMembers _members_AnimatorListener = new JniPeerMembers ("java/code/AnimatorListener", typeof (AnimatorListenerInvoker));
22+
static readonly JniPeerMembers _members_java_code_AnimatorListener = new JniPeerMembers ("java/code/AnimatorListener", typeof (AnimatorListenerInvoker));
2323

2424
public AnimatorListenerInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2525
{
@@ -31,7 +31,7 @@ internal partial class AnimatorListenerInvoker : global::Java.Lang.Object, Anima
3131
try {
3232
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
3333
__args [0] = new JniArgumentValue (param1);
34-
var __rm = _members_AnimatorListener.InstanceMethods.InvokeAbstractBooleanMethod (__id, this, __args);
34+
var __rm = _members_java_code_AnimatorListener.InstanceMethods.InvokeAbstractBooleanMethod (__id, this, __args);
3535
return __rm;
3636
} finally {
3737
}
@@ -44,7 +44,7 @@ internal partial class AnimatorListenerInvoker : global::Java.Lang.Object, Anima
4444
JniArgumentValue* __args = stackalloc JniArgumentValue [2];
4545
__args [0] = new JniArgumentValue (param1);
4646
__args [1] = new JniArgumentValue (param2);
47-
var __rm = _members_AnimatorListener.InstanceMethods.InvokeAbstractBooleanMethod (__id, this, __args);
47+
var __rm = _members_java_code_AnimatorListener.InstanceMethods.InvokeAbstractBooleanMethod (__id, this, __args);
4848
return __rm;
4949
} finally {
5050
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
8585
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
8686
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
8787
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
88-
get { return _members_IMyInterface; }
88+
get { return _members_java_code_IMyInterface; }
8989
}
9090

91-
static readonly JniPeerMembers _members_IMyInterface = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));
91+
static readonly JniPeerMembers _members_java_code_IMyInterface = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));
9292

9393
public IMyInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
9494
{
@@ -98,7 +98,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
9898
get {
9999
const string __id = "get_Count.()I";
100100
try {
101-
var __rm = _members_IMyInterface.InstanceMethods.InvokeVirtualInt32Method (__id, this, null);
101+
var __rm = _members_java_code_IMyInterface.InstanceMethods.InvokeVirtualInt32Method (__id, this, null);
102102
return __rm;
103103
} finally {
104104
}
@@ -108,7 +108,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
108108
try {
109109
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
110110
__args [0] = new JniArgumentValue (value);
111-
_members_IMyInterface.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
111+
_members_java_code_IMyInterface.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
112112
} finally {
113113
}
114114
}
@@ -118,7 +118,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
118118
get {
119119
const string __id = "get_Key.()Ljava/lang/String;";
120120
try {
121-
var __rm = _members_IMyInterface.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
121+
var __rm = _members_java_code_IMyInterface.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
122122
return global::Java.Interop.JniEnvironment.Strings.ToString (ref __rm, JniObjectReferenceOptions.CopyAndDispose);
123123
} finally {
124124
}
@@ -129,7 +129,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
129129
try {
130130
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
131131
__args [0] = new JniArgumentValue (native_value);
132-
_members_IMyInterface.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
132+
_members_java_code_IMyInterface.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
133133
} finally {
134134
global::Java.Interop.JniObjectReference.Dispose (ref native_value);
135135
}
@@ -140,7 +140,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
140140
get {
141141
const string __id = "get_AbstractCount.()I";
142142
try {
143-
var __rm = _members_IMyInterface.InstanceMethods.InvokeAbstractInt32Method (__id, this, null);
143+
var __rm = _members_java_code_IMyInterface.InstanceMethods.InvokeAbstractInt32Method (__id, this, null);
144144
return __rm;
145145
} finally {
146146
}
@@ -150,7 +150,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
150150
try {
151151
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
152152
__args [0] = new JniArgumentValue (value);
153-
_members_IMyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
153+
_members_java_code_IMyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
154154
} finally {
155155
}
156156
}
@@ -163,7 +163,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
163163
try {
164164
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
165165
__args [0] = new JniArgumentValue (native_key);
166-
var __rm = _members_IMyInterface.InstanceMethods.InvokeVirtualInt32Method (__id, this, __args);
166+
var __rm = _members_java_code_IMyInterface.InstanceMethods.InvokeVirtualInt32Method (__id, this, __args);
167167
return __rm;
168168
} finally {
169169
global::Java.Interop.JniObjectReference.Dispose (ref native_key);
@@ -174,7 +174,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
174174
{
175175
const string __id = "Key.()Ljava/lang/String;";
176176
try {
177-
var __rm = _members_IMyInterface.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
177+
var __rm = _members_java_code_IMyInterface.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
178178
return global::Java.Interop.JniEnvironment.Strings.ToString (ref __rm, JniObjectReferenceOptions.CopyAndDispose);
179179
} finally {
180180
}
@@ -184,7 +184,7 @@ internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterf
184184
{
185185
const string __id = "AbstractMethod.()V";
186186
try {
187-
_members_IMyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
187+
_members_java_code_IMyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
188188
} finally {
189189
}
190190
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ internal partial class IExtendedInterfaceInvoker : global::Java.Lang.Object, IEx
2222
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
2323
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
2424
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
25-
get { return _members_IExtendedInterface; }
25+
get { return _members_xamarin_test_ExtendedInterface; }
2626
}
2727

28-
static readonly JniPeerMembers _members_IExtendedInterface = new JniPeerMembers ("xamarin/test/ExtendedInterface", typeof (IExtendedInterfaceInvoker));
28+
static readonly JniPeerMembers _members_xamarin_test_ExtendedInterface = new JniPeerMembers ("xamarin/test/ExtendedInterface", typeof (IExtendedInterfaceInvoker));
2929

30-
static readonly JniPeerMembers _members_IBaseInterface = new JniPeerMembers ("xamarin/test/BaseInterface", typeof (IExtendedInterfaceInvoker));
30+
static readonly JniPeerMembers _members_xamarin_test_BaseInterface = new JniPeerMembers ("xamarin/test/BaseInterface", typeof (IExtendedInterfaceInvoker));
3131

3232
public IExtendedInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
3333
{
@@ -37,7 +37,7 @@ public unsafe void ExtendedMethod ()
3737
{
3838
const string __id = "extendedMethod.()V";
3939
try {
40-
_members_IExtendedInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
40+
_members_xamarin_test_ExtendedInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
4141
} finally {
4242
}
4343
}
@@ -46,7 +46,7 @@ public unsafe void BaseMethod ()
4646
{
4747
const string __id = "baseMethod.()V";
4848
try {
49-
_members_IBaseInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
49+
_members_xamarin_test_BaseInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
5050
} finally {
5151
}
5252
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ internal partial class IProtectedInterfaceInvoker : global::Java.Lang.Object, IP
3131
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
3232
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
3333
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
34-
get { return _members_IProtectedInterface; }
34+
get { return _members_xamarin_test_PublicClass_ProtectedInterface; }
3535
}
3636

37-
static readonly JniPeerMembers _members_IProtectedInterface = new JniPeerMembers ("xamarin/test/PublicClass$ProtectedInterface", typeof (IProtectedInterfaceInvoker));
37+
static readonly JniPeerMembers _members_xamarin_test_PublicClass_ProtectedInterface = new JniPeerMembers ("xamarin/test/PublicClass$ProtectedInterface", typeof (IProtectedInterfaceInvoker));
3838

3939
public IProtectedInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
4040
{
@@ -44,7 +44,7 @@ public unsafe void Foo ()
4444
{
4545
const string __id = "foo.()V";
4646
try {
47-
_members_IProtectedInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
47+
_members_xamarin_test_PublicClass_ProtectedInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
4848
} finally {
4949
}
5050
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ internal partial class II1Invoker : global::Java.Lang.Object, II1 {
1818
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
1919
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
2020
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
21-
get { return _members_II1; }
21+
get { return _members_xamarin_test_I1; }
2222
}
2323

24-
static readonly JniPeerMembers _members_II1 = new JniPeerMembers ("xamarin/test/I1", typeof (II1Invoker));
24+
static readonly JniPeerMembers _members_xamarin_test_I1 = new JniPeerMembers ("xamarin/test/I1", typeof (II1Invoker));
2525

2626
public II1Invoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2727
{
@@ -31,7 +31,7 @@ public unsafe void Close ()
3131
{
3232
const string __id = "close.()V";
3333
try {
34-
_members_II1.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
34+
_members_xamarin_test_I1.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
3535
} finally {
3636
}
3737
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ internal partial class II2Invoker : global::Java.Lang.Object, II2 {
1818
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
1919
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
2020
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
21-
get { return _members_II2; }
21+
get { return _members_xamarin_test_I2; }
2222
}
2323

24-
static readonly JniPeerMembers _members_II2 = new JniPeerMembers ("xamarin/test/I2", typeof (II2Invoker));
24+
static readonly JniPeerMembers _members_xamarin_test_I2 = new JniPeerMembers ("xamarin/test/I2", typeof (II2Invoker));
2525

2626
public II2Invoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2727
{
@@ -31,7 +31,7 @@ public unsafe void Close ()
3131
{
3232
const string __id = "close.()V";
3333
try {
34-
_members_II2.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
34+
_members_xamarin_test_I2.InstanceMethods.InvokeAbstractVoidMethod (__id, this, null);
3535
} finally {
3636
}
3737
}

tests/generator-Tests/expected.ji/TestInterface/Test.ME.IGenericInterface.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ internal partial class IGenericInterfaceInvoker : global::Java.Lang.Object, IGen
1919
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
2020
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
2121
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
22-
get { return _members_IGenericInterface; }
22+
get { return _members_test_me_GenericInterface; }
2323
}
2424

25-
static readonly JniPeerMembers _members_IGenericInterface = new JniPeerMembers ("test/me/GenericInterface", typeof (IGenericInterfaceInvoker));
25+
static readonly JniPeerMembers _members_test_me_GenericInterface = new JniPeerMembers ("test/me/GenericInterface", typeof (IGenericInterfaceInvoker));
2626

2727
public IGenericInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2828
{
@@ -35,7 +35,7 @@ public unsafe void SetObject (global::Java.Lang.Object value)
3535
try {
3636
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
3737
__args [0] = new JniArgumentValue (native_value);
38-
_members_IGenericInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
38+
_members_test_me_GenericInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
3939
} finally {
4040
global::System.GC.KeepAlive (value);
4141
}

tests/generator-Tests/expected.ji/TestInterface/Test.ME.IGenericPropertyInterface.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ internal partial class IGenericPropertyInterfaceInvoker : global::Java.Lang.Obje
2525
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
2626
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
2727
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
28-
get { return _members_IGenericPropertyInterface; }
28+
get { return _members_test_me_GenericPropertyInterface; }
2929
}
3030

31-
static readonly JniPeerMembers _members_IGenericPropertyInterface = new JniPeerMembers ("test/me/GenericPropertyInterface", typeof (IGenericPropertyInterfaceInvoker));
31+
static readonly JniPeerMembers _members_test_me_GenericPropertyInterface = new JniPeerMembers ("test/me/GenericPropertyInterface", typeof (IGenericPropertyInterfaceInvoker));
3232

3333
public IGenericPropertyInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
3434
{
@@ -38,7 +38,7 @@ public IGenericPropertyInterfaceInvoker (ref JniObjectReference reference, JniOb
3838
get {
3939
const string __id = "getObject.()Ljava/lang/Object;";
4040
try {
41-
var __rm = _members_IGenericPropertyInterface.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
41+
var __rm = _members_test_me_GenericPropertyInterface.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
4242
return global::Java.Interop.JniEnvironment.Runtime.ValueManager.GetValue<global::Java.Lang.Object>(ref __rm, JniObjectReferenceOptions.CopyAndDispose);
4343
} finally {
4444
}
@@ -49,7 +49,7 @@ public IGenericPropertyInterfaceInvoker (ref JniObjectReference reference, JniOb
4949
try {
5050
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
5151
__args [0] = new JniArgumentValue (native_value);
52-
_members_IGenericPropertyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
52+
_members_test_me_GenericPropertyInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
5353
} finally {
5454
global::System.GC.KeepAlive (value);
5555
}

tests/generator-Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ internal partial class ITestInterfaceInvoker : global::Java.Lang.Object, ITestIn
4545
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
4646
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
4747
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
48-
get { return _members_ITestInterface; }
48+
get { return _members_test_me_TestInterface; }
4949
}
5050

51-
static readonly JniPeerMembers _members_ITestInterface = new JniPeerMembers ("test/me/TestInterface", typeof (ITestInterfaceInvoker));
51+
static readonly JniPeerMembers _members_test_me_TestInterface = new JniPeerMembers ("test/me/TestInterface", typeof (ITestInterfaceInvoker));
5252

5353
public ITestInterfaceInvoker (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
5454
{
@@ -60,7 +60,7 @@ public unsafe int GetSpanFlags (global::Java.Lang.Object tag)
6060
try {
6161
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
6262
__args [0] = new JniArgumentValue (tag);
63-
var __rm = _members_ITestInterface.InstanceMethods.InvokeAbstractInt32Method (__id, this, __args);
63+
var __rm = _members_test_me_TestInterface.InstanceMethods.InvokeAbstractInt32Method (__id, this, __args);
6464
return __rm;
6565
} finally {
6666
global::System.GC.KeepAlive (tag);
@@ -73,7 +73,7 @@ public unsafe void Append (global::Java.Lang.ICharSequence value)
7373
try {
7474
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
7575
__args [0] = new JniArgumentValue (value);
76-
_members_ITestInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
76+
_members_test_me_TestInterface.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
7777
} finally {
7878
global::System.GC.KeepAlive (value);
7979
}
@@ -85,7 +85,7 @@ public unsafe void Append (global::Java.Lang.ICharSequence value)
8585
try {
8686
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
8787
__args [0] = new JniArgumentValue (value);
88-
var __rm = _members_ITestInterface.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
88+
var __rm = _members_test_me_TestInterface.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
8989
return global::Java.Interop.JniEnvironment.Runtime.ValueManager.GetValue<Java.Lang.ICharSequence>(ref __rm, JniObjectReferenceOptions.CopyAndDispose);
9090
} finally {
9191
global::System.GC.KeepAlive (value);

0 commit comments

Comments
 (0)