Skip to content

Commit fd774a5

Browse files
jpobstjonpryor
authored andcommitted
[generator] Always use XAPeerMembers for XAJavaInterop1 (#457)
Context: #341 When generating the `_members` field when using `generator --codegen-target=XAJavaInterop1`, in one instance we emit: static JniPeerMembers _members = new XAPeerMembers ("android/text/foo", typeof (ISpannableInvoker)); while in the 3 other instances we generate: static JniPeerMembers _members = new JniPeerMembers ("android/text/foo", typeof (ISpannableInvoker)); Refactor all the instances of writing this line to a single method which correctly uses `XAPeerMembers` when needed.
1 parent 30fbb50 commit fd774a5

File tree

130 files changed

+2178
-132
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+2178
-132
lines changed

tools/generator/Java.Interop.Tools.Generator.CodeGeneration/JavaInteropCodeGenerator.cs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,12 @@ static string GetInvokeType (string type)
2525

2626
internal override string GetAllInterfaceImplements () => "IJavaObject, IJavaPeerable";
2727

28+
protected virtual string GetPeerMembersType () => "JniPeerMembers";
29+
2830
internal override void WriteClassHandle (ClassGen type, string indent, bool requireNew)
2931
{
30-
writer.WriteLine ("{0}\tinternal {1} static readonly JniPeerMembers _members = new {2} (\"{3}\", typeof ({4}));",
31-
indent,
32-
requireNew ? "new" : " ",
33-
GetPeerMembersType (),
34-
type.RawJniName,
35-
type.Name);
32+
WritePeerMembers (indent + '\t', true, requireNew, type.RawJniName, type.Name);
33+
3634
writer.WriteLine ("{0}\tinternal static {1}IntPtr class_ref {{", indent, requireNew ? "new " : string.Empty);
3735
writer.WriteLine ("{0}\t\tget {{", indent);
3836
writer.WriteLine ("{0}\t\t\treturn _members.JniPeerType.PeerReference.Handle;", indent);
@@ -55,22 +53,15 @@ internal override void WriteClassHandle (ClassGen type, string indent, bool requ
5553
}
5654
}
5755

58-
protected virtual string GetPeerMembersType ()
59-
{
60-
return "JniPeerMembers";
61-
}
62-
6356
internal override void WriteClassHandle (InterfaceGen type, string indent, string declaringType)
6457
{
65-
writer.WriteLine ("{0}new static JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",indent, type.RawJniName, declaringType);
58+
WritePeerMembers (indent, false, true, type.RawJniName, declaringType);
6659
}
6760

6861
internal override void WriteClassInvokerHandle (ClassGen type, string indent, string declaringType)
6962
{
70-
writer.WriteLine ("{0}internal new static readonly JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",
71-
indent,
72-
type.RawJniName,
73-
declaringType);
63+
WritePeerMembers (indent, true, true, type.RawJniName, declaringType);
64+
7465
writer.WriteLine ();
7566
writer.WriteLine ("{0}public override global::Java.Interop.JniPeerMembers JniPeerMembers {{", indent);
7667
writer.WriteLine ("{0}\tget {{ return _members; }}", indent);
@@ -84,10 +75,8 @@ internal override void WriteClassInvokerHandle (ClassGen type, string indent, st
8475

8576
internal override void WriteInterfaceInvokerHandle (InterfaceGen type, string indent, string declaringType)
8677
{
87-
writer.WriteLine ("{0}internal new static readonly JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",
88-
indent,
89-
type.RawJniName,
90-
declaringType);
78+
WritePeerMembers (indent, true, true, type.RawJniName, declaringType);
79+
9180
writer.WriteLine ();
9281
writer.WriteLine ("{0}static IntPtr java_class_ref {{", indent);
9382
writer.WriteLine ("{0}\tget {{ return _members.JniPeerType.PeerReference.Handle; }}", indent);
@@ -272,6 +261,14 @@ internal override void WriteFieldSetBody (Field field, string indent, GenBase ty
272261
}
273262
writer.WriteLine ("{0}}}", indent);
274263
}
264+
265+
void WritePeerMembers (string indent, bool isInternal, bool isNew, string rawJniType, string declaringType)
266+
{
267+
var signature = $"{(isInternal ? "internal " : "")}static {(isNew ? "new " : "")}readonly JniPeerMembers _members = ";
268+
var type = $"new {GetPeerMembersType ()} (\"{rawJniType}\", typeof ({declaringType}));";
269+
270+
writer.WriteLine ($"{indent}{signature}{type}");
271+
}
275272
}
276273
}
277274

tools/generator/Java.Interop.Tools.Generator.CodeGeneration/XAJavaInteropCodeGenerator.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ public XAJavaInteropCodeGenerator (TextWriter writer, CodeGenerationOptions opti
99
{
1010
}
1111

12-
protected override string GetPeerMembersType ()
13-
{
14-
return "XAPeerMembers";
15-
}
12+
protected override string GetPeerMembersType () => "XAPeerMembers";
1613
}
1714
}
1815

tools/generator/Tests-Core/expected.ji/Android.Text.ISpannable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public partial interface ISpannable : Android.Text.ISpanned {
1414
[global::Android.Runtime.Register ("android/text/Spannable", DoNotGenerateAcw=true)]
1515
internal partial class ISpannableInvoker : global::Java.Lang.Object, ISpannable {
1616

17-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/Spannable", typeof (ISpannableInvoker));
17+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/Spannable", typeof (ISpannableInvoker));
1818

1919
static IntPtr java_class_ref {
2020
get { return _members.JniPeerType.PeerReference.Handle; }

tools/generator/Tests-Core/expected.ji/Android.Text.ISpanned.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public partial interface ISpanned : IJavaObject, IJavaPeerable {
1919
[global::Android.Runtime.Register ("android/text/Spanned", DoNotGenerateAcw=true)]
2020
internal partial class ISpannedInvoker : global::Java.Lang.Object, ISpanned {
2121

22-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/Spanned", typeof (ISpannedInvoker));
22+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/Spanned", typeof (ISpannedInvoker));
2323

2424
static IntPtr java_class_ref {
2525
get { return _members.JniPeerType.PeerReference.Handle; }

tools/generator/Tests-Core/expected.ji/Android.Text.SpannableString.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Android.Text {
99
[global::Android.Runtime.Register ("android/text/SpannableString", DoNotGenerateAcw=true)]
1010
public partial class SpannableString : Android.Text.SpannableStringInternal, Android.Text.ISpannable {
1111

12-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableString", typeof (SpannableString));
12+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableString", typeof (SpannableString));
1313
internal static new IntPtr class_ref {
1414
get {
1515
return _members.JniPeerType.PeerReference.Handle;

tools/generator/Tests-Core/expected.ji/Android.Text.SpannableStringInternal.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Android.Text {
99
[global::Android.Runtime.Register ("android/text/SpannableStringInternal", DoNotGenerateAcw=true)]
1010
public abstract partial class SpannableStringInternal : Java.Lang.Object {
1111

12-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableStringInternal", typeof (SpannableStringInternal));
12+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableStringInternal", typeof (SpannableStringInternal));
1313
internal static new IntPtr class_ref {
1414
get {
1515
return _members.JniPeerType.PeerReference.Handle;
@@ -70,7 +70,7 @@ internal partial class SpannableStringInternalInvoker : SpannableStringInternal
7070

7171
public SpannableStringInternalInvoker (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) {}
7272

73-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableStringInternal", typeof (SpannableStringInternalInvoker));
73+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableStringInternal", typeof (SpannableStringInternalInvoker));
7474

7575
public override global::Java.Interop.JniPeerMembers JniPeerMembers {
7676
get { return _members; }

tools/generator/Tests-Core/expected.ji/Android.Views.View.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public partial interface IOnClickListener : IJavaObject, IJavaPeerable {
2222
[global::Android.Runtime.Register ("android/view/View$OnClickListener", DoNotGenerateAcw=true)]
2323
internal partial class IOnClickListenerInvoker : global::Java.Lang.Object, IOnClickListener {
2424

25-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View$OnClickListener", typeof (IOnClickListenerInvoker));
25+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View$OnClickListener", typeof (IOnClickListenerInvoker));
2626

2727
static IntPtr java_class_ref {
2828
get { return _members.JniPeerType.PeerReference.Handle; }
@@ -128,7 +128,7 @@ internal static bool __IsEmpty (IOnClickListenerImplementor value)
128128
}
129129

130130

131-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View", typeof (View));
131+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View", typeof (View));
132132
internal static new IntPtr class_ref {
133133
get {
134134
return _members.JniPeerType.PeerReference.Handle;

tools/generator/Tests-Core/expected.ji/Java.Lang.Object.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Java.Lang {
99
[global::Android.Runtime.Register ("java/lang/Object", DoNotGenerateAcw=true)]
1010
public partial class Object {
1111

12-
internal static readonly JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (Object));
12+
internal static readonly JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (Object));
1313
internal static IntPtr class_ref {
1414
get {
1515
return _members.JniPeerType.PeerReference.Handle;

tools/generator/Tests/Integration-Tests/CSharpKeywords.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using NUnit.Framework;
33

44
namespace generatortests

tools/generator/Tests/Unit-Tests/CodeGeneratorExpectedResults/JavaInterop1/WriteClass.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
33
public partial class MyClass {
44

5-
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
5+
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
66
internal static new IntPtr class_ref {
77
get {
88
return _members.JniPeerType.PeerReference.Handle;

0 commit comments

Comments
 (0)