Skip to content

Commit d9a087b

Browse files
committed
[generator] Fix xamarin-android/src/Mono.Android build
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.
1 parent 05eddd9 commit d9a087b

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

tools/generator/CodeGenerationOptions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,13 @@ public string GetStringArrayToCharSequenceArrayMethodName ()
309309
? "ICharSequenceExtensions.ToCharSequenceArray"
310310
: "CharSequence.ArrayFromStringArray";
311311
}
312+
313+
public string GetCharSequenceArrayToStringArrayMethodName ()
314+
{
315+
return CodeGenerationTarget == CodeGenerationTarget.JavaInterop1
316+
? "ICharSequenceExtensions.ToStringArray"
317+
: "CharSequence.ArrayToStringArray";
318+
}
312319
}
313320
}
314321

tools/generator/SourceWriters/BoundFieldAsProperty.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,13 @@ protected override void WriteSetterBody (CodeWriter writer)
144144
if (opt.CodeGenerationTarget != CodeGenerationTarget.JavaInterop1 &&
145145
field.SetParameters.HasCleanup &&
146146
!have_prep) {
147+
arg = native_arg;
147148
writer.WriteLine ($"IntPtr {native_arg} = global::Android.Runtime.JNIEnv.ToLocalJniHandle (value);");
148149
}
149150
}
150151

151152
writer.WriteLine ("try {");
153+
152154
writer.Write ($"\t_members.{indirect}.SetValue (__id{(field.IsStatic ? "" : ", this")}, ");
153155

154156
if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1) {
@@ -161,7 +163,6 @@ protected override void WriteSetterBody (CodeWriter writer)
161163
} else {
162164
writer.WriteLine ($"{(invokeType != "Object" ? arg : "new JniObjectReference (" + arg + ")")});");
163165
}
164-
writer.WriteLine ();
165166

166167
writer.WriteLine ("} finally {");
167168
writer.Indent ();

tools/generator/SourceWriters/Extensions/SourceWriterExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ public static void WriteMethodStringOverloadBody (CodeWriter writer, Method meth
367367
case "void":
368368
break;
369369
case "Java.Lang.ICharSequence[]":
370-
writer.WriteLine ($"var __rsval = {opt.GetStringArrayToCharSequenceArrayMethodName ()} (__result);");
370+
writer.WriteLine ($"var __rsval = {opt.GetCharSequenceArrayToStringArrayMethodName ()} (__result);");
371371
break;
372372
case "Java.Lang.ICharSequence":
373373
writer.WriteLine ("var __rsval = __result?.ToString ();");

0 commit comments

Comments
 (0)