Skip to content

Commit 2a882d2

Browse files
authored
[generator] Fix xamarin-android/src/Mono.Android build (#972)
Context: a65d6fb Context: dotnet/android#6939 dotnet/android#6939 attempted to bump to 05eddd9, which promptly broke the build of src/Mono.Android, e.g. `src/Mono.Android/obj/Debug/net6.0/android-32/mcw/Android.Widget.GridLayout.cs`: /* */ partial class GridLayout { /* */ partial class partial class LayoutParams { /* */ [Register ("rowSpec")] /* */ public Android.Widget.GridLayout.Spec? RowSpec { /* */ get { /* */ const string __id = "rowSpec.Landroid/widget/GridLayout$Spec;"; /* */ var __v = _members.InstanceFields.GetObjectValue (__id, this); /* */ return global::Java.Lang.Object.GetObject<Android.Widget.GridLayout.Spec> (__v.Handle, JniHandleOwnership.TransferLocalRef); /* */ } /* */ set { /* */ const string __id = "rowSpec.Landroid/widget/GridLayout$Spec;"; /* */ IntPtr native_value = global::Android.Runtime.JNIEnv.ToLocalJniHandle (value); /* */ try { /* L 239 */ _members.InstanceFields.SetValue (__id, this, new JniObjectReference (value)); /* */ } finally { /* L 242 */ global::Android.Runtime.JNIEnv.DeleteLocalRef (value); /* */ } /* */ } /* */ } /* */ } /* */ } due to compilation errors: src/Mono.Android/obj/Debug/net6.0/android-32/mcw/Android.Widget.GridLayout.cs(239,77): error CS1503: Argument 1: cannot convert from 'Android.Widget.GridLayout.Spec' to 'System.IntPtr' src/Mono.Android/obj/Debug/net6.0/android-32/mcw/Android.Widget.GridLayout.cs(242,54): error CS1503: Argument 1: cannot convert from 'Android.Widget.GridLayout.Spec' to 'System.IntPtr' This was caused by `BoundFieldAsProperty.cs` not appropriately setting `arg` to `native_arg`, so that the correct variable would be cleaned up in the `finally` block. There was another set of errors: src/Mono.Android/obj/Release/net6.0/android-32/mcw/Android.Widget.ArrayAdapter.cs(525,53): error CS1503: Argument 1: cannot convert from 'Java.Lang.ICharSequence[]' to 'string[]?' which was also caused by a65d6fb mis-refactoring `SourceWriterExtensions.cs`, and overlooking the entire existence of the `CharSequence.ArrayToStringArray()` method (oops). Update `generator` so that xamarin-android once again builds, and add unit tests to hit these particular code paths.
1 parent 968e0f5 commit 2a882d2

File tree

12 files changed

+482
-2
lines changed

12 files changed

+482
-2
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='com.example']/class[@name='MyClass']"
2+
[global::Java.Interop.JniTypeSignature ("com/example/MyClass", GenerateJavaPeer=false)]
3+
public partial class MyClass : Java.Lang.Object {
4+
static readonly JniPeerMembers _members = new JniPeerMembers ("com/example/MyClass", typeof (MyClass));
5+
6+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
7+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
8+
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
9+
get { return _members; }
10+
}
11+
12+
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
13+
{
14+
}
15+
16+
// Metadata.xml XPath method reference: path="/api/package[@name='com.example']/class[@name='MyClass']/method[@name='echo' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence[]']]"
17+
public virtual unsafe Java.Interop.JavaObjectArray<Java.Lang.ICharSequence>? Echo (Java.Interop.JavaObjectArray<Java.Lang.ICharSequence>? messages)
18+
{
19+
const string __id = "echo.([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;";
20+
var native_messages = global::Java.Interop.JniEnvironment.Arrays.CreateMarshalObjectArray<global::Java.Lang.ICharSequence> (messages);
21+
try {
22+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
23+
__args [0] = new JniArgumentValue (native_messages);
24+
var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
25+
return global::Java.Interop.JniEnvironment.Runtime.ValueManager.GetValue<global::Java.Interop.JavaObjectArray<Java.Lang.ICharSequence>>(ref __rm, JniObjectReferenceOptions.CopyAndDispose);
26+
} finally {
27+
if (native_messages != null) {
28+
native_messages.DisposeUnlessReferenced ();
29+
}
30+
global::System.GC.KeepAlive (messages);
31+
}
32+
}
33+
34+
public Java.Interop.JavaObjectArray<string>? Echo (Java.Interop.JavaObjectArray<string>? messages)
35+
{
36+
Java.Interop.JavaObjectArray<Java.Lang.ICharSequence>? __result = Echo (messages);
37+
var __rsval = __result;
38+
return __rsval;
39+
}
40+
41+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Java.Interop.JniTypeSignature ("java/code/MyClass", GenerateJavaPeer=false)]
3+
public partial class MyClass {
4+
5+
// Metadata.xml XPath field reference: path="/api/package[@name='java.code']/class[@name='MyClass']/field[@name='field']"
6+
public java.code.Example? field {
7+
get {
8+
const string __id = "field.Ljava/code/Example;";
9+
10+
var __v = _members.InstanceFields.GetObjectValue (__id, this);
11+
return global::Java.Interop.JniEnvironment.Runtime.ValueManager.GetValue<java.code.Example? >(ref __v, JniObjectReferenceOptions.Copy);
12+
}
13+
set {
14+
const string __id = "field.Ljava/code/Example;";
15+
16+
try {
17+
_members.InstanceFields.SetValue (__id, this, value?.PeerReference ?? default);
18+
19+
} finally {
20+
GC.KeepAlive (value);
21+
}
22+
}
23+
}
24+
25+
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
26+
27+
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
28+
{
29+
}
30+
31+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='com.example']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("com/example/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass : Java.Lang.Object {
4+
static readonly JniPeerMembers _members = new XAPeerMembers ("com/example/MyClass", typeof (MyClass));
5+
6+
internal static new IntPtr class_ref {
7+
get { return _members.JniPeerType.PeerReference.Handle; }
8+
}
9+
10+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
11+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
12+
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
13+
get { return _members; }
14+
}
15+
16+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
17+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
18+
protected override IntPtr ThresholdClass {
19+
get { return _members.JniPeerType.PeerReference.Handle; }
20+
}
21+
22+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
23+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
24+
protected override global::System.Type ThresholdType {
25+
get { return _members.ManagedPeerType; }
26+
}
27+
28+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
29+
{
30+
}
31+
32+
static Delegate? cb_echo_arrayLjava_lang_CharSequence_;
33+
#pragma warning disable 0169
34+
static Delegate GetEcho_arrayLjava_lang_CharSequence_Handler ()
35+
{
36+
if (cb_echo_arrayLjava_lang_CharSequence_ == null)
37+
cb_echo_arrayLjava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPL_L) n_Echo_arrayLjava_lang_CharSequence_);
38+
return cb_echo_arrayLjava_lang_CharSequence_;
39+
}
40+
41+
static IntPtr n_Echo_arrayLjava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_messages)
42+
{
43+
var __this = global::Java.Lang.Object.GetObject<Com.Example.MyClass> (jnienv, native__this, JniHandleOwnership.DoNotTransfer)!;
44+
var messages = (Java.Lang.ICharSequence[]?) JNIEnv.GetArray (native_messages, JniHandleOwnership.DoNotTransfer, typeof (Java.Lang.ICharSequence));
45+
IntPtr __ret = JNIEnv.NewArray (__this.EchoFormatted (messages));
46+
if (messages != null)
47+
JNIEnv.CopyArray (messages, native_messages);
48+
return __ret;
49+
}
50+
#pragma warning restore 0169
51+
52+
// Metadata.xml XPath method reference: path="/api/package[@name='com.example']/class[@name='MyClass']/method[@name='echo' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence[]']]"
53+
[Register ("echo", "([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;", "GetEcho_arrayLjava_lang_CharSequence_Handler")]
54+
public virtual unsafe Java.Lang.ICharSequence[]? EchoFormatted (Java.Lang.ICharSequence[]? messages)
55+
{
56+
const string __id = "echo.([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;";
57+
IntPtr native_messages = JNIEnv.NewArray (messages);
58+
try {
59+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
60+
__args [0] = new JniArgumentValue (native_messages);
61+
var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
62+
return (Java.Lang.ICharSequence[]?) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (Java.Lang.ICharSequence));
63+
} finally {
64+
if (messages != null) {
65+
JNIEnv.CopyArray (native_messages, messages);
66+
JNIEnv.DeleteLocalRef (native_messages);
67+
}
68+
global::System.GC.KeepAlive (messages);
69+
}
70+
}
71+
72+
public string[]? Echo (string[]? messages)
73+
{
74+
var jlca_messages = CharSequence.ArrayFromStringArray (messages);
75+
Java.Lang.ICharSequence[]? __result = EchoFormatted (jlca_messages);
76+
var __rsval = CharSequence.ArrayToStringArray (__result);
77+
if (jlca_messages != null) foreach (var s in jlca_messages) s?.Dispose ();
78+
return __rsval;
79+
}
80+
81+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass {
4+
5+
// Metadata.xml XPath field reference: path="/api/package[@name='java.code']/class[@name='MyClass']/field[@name='field']"
6+
[Register ("field")]
7+
public java.code.Example? field {
8+
get {
9+
const string __id = "field.Ljava/code/Example;";
10+
11+
var __v = _members.InstanceFields.GetObjectValue (__id, this);
12+
return global::Java.Lang.Object.GetObject<java.code.Example> (__v.Handle, JniHandleOwnership.TransferLocalRef);
13+
}
14+
set {
15+
const string __id = "field.Ljava/code/Example;";
16+
17+
IntPtr native_value = global::Android.Runtime.JNIEnv.ToLocalJniHandle (value);
18+
try {
19+
_members.InstanceFields.SetValue (__id, this, new JniObjectReference (native_value));
20+
} finally {
21+
global::Android.Runtime.JNIEnv.DeleteLocalRef (native_value);
22+
}
23+
}
24+
}
25+
26+
static readonly JniPeerMembers _members = new XAPeerMembers ("java/code/MyClass", typeof (MyClass));
27+
28+
internal static IntPtr class_ref {
29+
get { return _members.JniPeerType.PeerReference.Handle; }
30+
}
31+
32+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
33+
{
34+
}
35+
36+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='com.example']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("com/example/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass : Java.Lang.Object {
4+
static readonly JniPeerMembers _members = new XAPeerMembers ("com/example/MyClass", typeof (MyClass));
5+
6+
internal static new IntPtr class_ref {
7+
get { return _members.JniPeerType.PeerReference.Handle; }
8+
}
9+
10+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
11+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
12+
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
13+
get { return _members; }
14+
}
15+
16+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
17+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
18+
protected override IntPtr ThresholdClass {
19+
get { return _members.JniPeerType.PeerReference.Handle; }
20+
}
21+
22+
[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
23+
[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
24+
protected override global::System.Type ThresholdType {
25+
get { return _members.ManagedPeerType; }
26+
}
27+
28+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
29+
{
30+
}
31+
32+
static Delegate cb_echo_arrayLjava_lang_CharSequence_;
33+
#pragma warning disable 0169
34+
static Delegate GetEcho_arrayLjava_lang_CharSequence_Handler ()
35+
{
36+
if (cb_echo_arrayLjava_lang_CharSequence_ == null)
37+
cb_echo_arrayLjava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPL_L) n_Echo_arrayLjava_lang_CharSequence_);
38+
return cb_echo_arrayLjava_lang_CharSequence_;
39+
}
40+
41+
static IntPtr n_Echo_arrayLjava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_messages)
42+
{
43+
var __this = global::Java.Lang.Object.GetObject<Com.Example.MyClass> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
44+
var messages = (Java.Lang.ICharSequence[]) JNIEnv.GetArray (native_messages, JniHandleOwnership.DoNotTransfer, typeof (Java.Lang.ICharSequence));
45+
IntPtr __ret = JNIEnv.NewArray (__this.EchoFormatted (messages));
46+
if (messages != null)
47+
JNIEnv.CopyArray (messages, native_messages);
48+
return __ret;
49+
}
50+
#pragma warning restore 0169
51+
52+
// Metadata.xml XPath method reference: path="/api/package[@name='com.example']/class[@name='MyClass']/method[@name='echo' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence[]']]"
53+
[Register ("echo", "([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;", "GetEcho_arrayLjava_lang_CharSequence_Handler")]
54+
public virtual unsafe Java.Lang.ICharSequence[] EchoFormatted (Java.Lang.ICharSequence[] messages)
55+
{
56+
const string __id = "echo.([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;";
57+
IntPtr native_messages = JNIEnv.NewArray (messages);
58+
try {
59+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
60+
__args [0] = new JniArgumentValue (native_messages);
61+
var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
62+
return (Java.Lang.ICharSequence[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (Java.Lang.ICharSequence));
63+
} finally {
64+
if (messages != null) {
65+
JNIEnv.CopyArray (native_messages, messages);
66+
JNIEnv.DeleteLocalRef (native_messages);
67+
}
68+
global::System.GC.KeepAlive (messages);
69+
}
70+
}
71+
72+
public string[] Echo (string[] messages)
73+
{
74+
var jlca_messages = CharSequence.ArrayFromStringArray (messages);
75+
Java.Lang.ICharSequence[] __result = EchoFormatted (jlca_messages);
76+
var __rsval = CharSequence.ArrayToStringArray (__result);
77+
if (jlca_messages != null) foreach (var s in jlca_messages) s?.Dispose ();
78+
return __rsval;
79+
}
80+
81+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass {
4+
5+
// Metadata.xml XPath field reference: path="/api/package[@name='java.code']/class[@name='MyClass']/field[@name='field']"
6+
[Register ("field")]
7+
public java.code.Example field {
8+
get {
9+
const string __id = "field.Ljava/code/Example;";
10+
11+
var __v = _members.InstanceFields.GetObjectValue (__id, this);
12+
return global::Java.Lang.Object.GetObject<java.code.Example> (__v.Handle, JniHandleOwnership.TransferLocalRef);
13+
}
14+
set {
15+
const string __id = "field.Ljava/code/Example;";
16+
17+
IntPtr native_value = global::Android.Runtime.JNIEnv.ToLocalJniHandle (value);
18+
try {
19+
_members.InstanceFields.SetValue (__id, this, new JniObjectReference (native_value));
20+
} finally {
21+
global::Android.Runtime.JNIEnv.DeleteLocalRef (native_value);
22+
}
23+
}
24+
}
25+
26+
static readonly JniPeerMembers _members = new XAPeerMembers ("java/code/MyClass", typeof (MyClass));
27+
28+
internal static IntPtr class_ref {
29+
get { return _members.JniPeerType.PeerReference.Handle; }
30+
}
31+
32+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
33+
{
34+
}
35+
36+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='com.example']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("com/example/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass : Java.Lang.Object {
4+
5+
internal static new IntPtr java_class_handle;
6+
internal static new IntPtr class_ref {
7+
get {
8+
return JNIEnv.FindClass ("com/example/MyClass", ref java_class_handle);
9+
}
10+
}
11+
12+
protected override IntPtr ThresholdClass {
13+
get { return class_ref; }
14+
}
15+
16+
protected override global::System.Type ThresholdType {
17+
get { return typeof (MyClass); }
18+
}
19+
20+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {}
21+
22+
static Delegate cb_echo_arrayLjava_lang_CharSequence_;
23+
#pragma warning disable 0169
24+
static Delegate GetEcho_arrayLjava_lang_CharSequence_Handler ()
25+
{
26+
if (cb_echo_arrayLjava_lang_CharSequence_ == null)
27+
cb_echo_arrayLjava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPL_L) n_Echo_arrayLjava_lang_CharSequence_);
28+
return cb_echo_arrayLjava_lang_CharSequence_;
29+
}
30+
31+
static IntPtr n_Echo_arrayLjava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_messages)
32+
{
33+
var __this = global::Java.Lang.Object.GetObject<Com.Example.MyClass> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
34+
var messages = (Java.Lang.ICharSequence[]) JNIEnv.GetArray (native_messages, JniHandleOwnership.DoNotTransfer, typeof (Java.Lang.ICharSequence));
35+
IntPtr __ret = JNIEnv.NewArray (__this.EchoFormatted (messages));
36+
if (messages != null)
37+
JNIEnv.CopyArray (messages, native_messages);
38+
return __ret;
39+
}
40+
#pragma warning restore 0169
41+
42+
static IntPtr id_echo_arrayLjava_lang_CharSequence_;
43+
// Metadata.xml XPath method reference: path="/api/package[@name='com.example']/class[@name='MyClass']/method[@name='echo' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence[]']]"
44+
[Register ("echo", "([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;", "GetEcho_arrayLjava_lang_CharSequence_Handler")]
45+
public virtual unsafe Java.Lang.ICharSequence[] EchoFormatted (Java.Lang.ICharSequence[] messages)
46+
{
47+
if (id_echo_arrayLjava_lang_CharSequence_ == IntPtr.Zero)
48+
id_echo_arrayLjava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "echo", "([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;");
49+
IntPtr native_messages = JNIEnv.NewArray (messages);
50+
try {
51+
JValue* __args = stackalloc JValue [1];
52+
__args [0] = new JValue (native_messages);
53+
54+
Java.Lang.ICharSequence[] __ret;
55+
if (((object) this).GetType () == ThresholdType)
56+
__ret = (Java.Lang.ICharSequence[]) JNIEnv.GetArray (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_echo_arrayLjava_lang_CharSequence_, __args), JniHandleOwnership.TransferLocalRef, typeof (Java.Lang.ICharSequence));
57+
else
58+
__ret = (Java.Lang.ICharSequence[]) JNIEnv.GetArray (JNIEnv.CallNonvirtualObjectMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "echo", "([Ljava/lang/CharSequence;)[Ljava/lang/CharSequence;"), __args), JniHandleOwnership.TransferLocalRef, typeof (Java.Lang.ICharSequence));
59+
return __ret;
60+
} finally {
61+
if (messages != null) {
62+
JNIEnv.CopyArray (native_messages, messages);
63+
JNIEnv.DeleteLocalRef (native_messages);
64+
}
65+
}
66+
}
67+
68+
public string[] Echo (string[] messages)
69+
{
70+
var jlca_messages = CharSequence.ArrayFromStringArray(messages);
71+
Java.Lang.ICharSequence[] __result = EchoFormatted (jlca_messages);
72+
var __rsval = CharSequence.ArrayToStringArray (__result);
73+
if (jlca_messages != null) foreach (var s in jlca_messages) s?.Dispose ();
74+
return __rsval;
75+
}
76+
77+
}

0 commit comments

Comments
 (0)