Skip to content

Commit

Permalink
[generator] Always use XAPeerMembers for XAJavaInterop1 (dotnet#457)
Browse files Browse the repository at this point in the history
Context: dotnet#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.
  • Loading branch information
jpobst authored and jonpryor committed Aug 2, 2019
1 parent 30fbb50 commit fd774a5
Show file tree
Hide file tree
Showing 130 changed files with 2,178 additions and 132 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,12 @@ static string GetInvokeType (string type)

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

protected virtual string GetPeerMembersType () => "JniPeerMembers";

internal override void WriteClassHandle (ClassGen type, string indent, bool requireNew)
{
writer.WriteLine ("{0}\tinternal {1} static readonly JniPeerMembers _members = new {2} (\"{3}\", typeof ({4}));",
indent,
requireNew ? "new" : " ",
GetPeerMembersType (),
type.RawJniName,
type.Name);
WritePeerMembers (indent + '\t', true, requireNew, type.RawJniName, type.Name);

writer.WriteLine ("{0}\tinternal static {1}IntPtr class_ref {{", indent, requireNew ? "new " : string.Empty);
writer.WriteLine ("{0}\t\tget {{", indent);
writer.WriteLine ("{0}\t\t\treturn _members.JniPeerType.PeerReference.Handle;", indent);
Expand All @@ -55,22 +53,15 @@ internal override void WriteClassHandle (ClassGen type, string indent, bool requ
}
}

protected virtual string GetPeerMembersType ()
{
return "JniPeerMembers";
}

internal override void WriteClassHandle (InterfaceGen type, string indent, string declaringType)
{
writer.WriteLine ("{0}new static JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",indent, type.RawJniName, declaringType);
WritePeerMembers (indent, false, true, type.RawJniName, declaringType);
}

internal override void WriteClassInvokerHandle (ClassGen type, string indent, string declaringType)
{
writer.WriteLine ("{0}internal new static readonly JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",
indent,
type.RawJniName,
declaringType);
WritePeerMembers (indent, true, true, type.RawJniName, declaringType);

writer.WriteLine ();
writer.WriteLine ("{0}public override global::Java.Interop.JniPeerMembers JniPeerMembers {{", indent);
writer.WriteLine ("{0}\tget {{ return _members; }}", indent);
Expand All @@ -84,10 +75,8 @@ internal override void WriteClassInvokerHandle (ClassGen type, string indent, st

internal override void WriteInterfaceInvokerHandle (InterfaceGen type, string indent, string declaringType)
{
writer.WriteLine ("{0}internal new static readonly JniPeerMembers _members = new JniPeerMembers (\"{1}\", typeof ({2}));",
indent,
type.RawJniName,
declaringType);
WritePeerMembers (indent, true, true, type.RawJniName, declaringType);

writer.WriteLine ();
writer.WriteLine ("{0}static IntPtr java_class_ref {{", indent);
writer.WriteLine ("{0}\tget {{ return _members.JniPeerType.PeerReference.Handle; }}", indent);
Expand Down Expand Up @@ -272,6 +261,14 @@ internal override void WriteFieldSetBody (Field field, string indent, GenBase ty
}
writer.WriteLine ("{0}}}", indent);
}

void WritePeerMembers (string indent, bool isInternal, bool isNew, string rawJniType, string declaringType)
{
var signature = $"{(isInternal ? "internal " : "")}static {(isNew ? "new " : "")}readonly JniPeerMembers _members = ";
var type = $"new {GetPeerMembersType ()} (\"{rawJniType}\", typeof ({declaringType}));";

writer.WriteLine ($"{indent}{signature}{type}");
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ public XAJavaInteropCodeGenerator (TextWriter writer, CodeGenerationOptions opti
{
}

protected override string GetPeerMembersType ()
{
return "XAPeerMembers";
}
protected override string GetPeerMembersType () => "XAPeerMembers";
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public partial interface ISpannable : Android.Text.ISpanned {
[global::Android.Runtime.Register ("android/text/Spannable", DoNotGenerateAcw=true)]
internal partial class ISpannableInvoker : global::Java.Lang.Object, ISpannable {

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

static IntPtr java_class_ref {
get { return _members.JniPeerType.PeerReference.Handle; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public partial interface ISpanned : IJavaObject, IJavaPeerable {
[global::Android.Runtime.Register ("android/text/Spanned", DoNotGenerateAcw=true)]
internal partial class ISpannedInvoker : global::Java.Lang.Object, ISpanned {

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

static IntPtr java_class_ref {
get { return _members.JniPeerType.PeerReference.Handle; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Android.Text {
[global::Android.Runtime.Register ("android/text/SpannableString", DoNotGenerateAcw=true)]
public partial class SpannableString : Android.Text.SpannableStringInternal, Android.Text.ISpannable {

internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableString", typeof (SpannableString));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/text/SpannableString", typeof (SpannableString));
internal static new IntPtr class_ref {
get {
return _members.JniPeerType.PeerReference.Handle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Android.Text {
[global::Android.Runtime.Register ("android/text/SpannableStringInternal", DoNotGenerateAcw=true)]
public abstract partial class SpannableStringInternal : Java.Lang.Object {

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

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

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

public override global::Java.Interop.JniPeerMembers JniPeerMembers {
get { return _members; }
Expand Down
4 changes: 2 additions & 2 deletions tools/generator/Tests-Core/expected.ji/Android.Views.View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public partial interface IOnClickListener : IJavaObject, IJavaPeerable {
[global::Android.Runtime.Register ("android/view/View$OnClickListener", DoNotGenerateAcw=true)]
internal partial class IOnClickListenerInvoker : global::Java.Lang.Object, IOnClickListener {

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

static IntPtr java_class_ref {
get { return _members.JniPeerType.PeerReference.Handle; }
Expand Down Expand Up @@ -128,7 +128,7 @@ internal static bool __IsEmpty (IOnClickListenerImplementor value)
}


internal new static readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View", typeof (View));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("android/view/View", typeof (View));
internal static new IntPtr class_ref {
get {
return _members.JniPeerType.PeerReference.Handle;
Expand Down
2 changes: 1 addition & 1 deletion tools/generator/Tests-Core/expected.ji/Java.Lang.Object.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Java.Lang {
[global::Android.Runtime.Register ("java/lang/Object", DoNotGenerateAcw=true)]
public partial class Object {

internal static readonly JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (Object));
internal static readonly JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (Object));
internal static IntPtr class_ref {
get {
return _members.JniPeerType.PeerReference.Handle;
Expand Down
2 changes: 1 addition & 1 deletion tools/generator/Tests/Integration-Tests/CSharpKeywords.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using NUnit.Framework;

namespace generatortests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
public partial class MyClass {

internal new static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
internal static new IntPtr class_ref {
get {
return _members.JniPeerType.PeerReference.Handle;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
internal static readonly JniPeerMembers _members = new JniPeerMembers ("com/mypackage/foo", typeof (foo));
internal static readonly JniPeerMembers _members = new JniPeerMembers ("com/mypackage/foo", typeof (foo));
internal static IntPtr class_ref {
get {
return _members.JniPeerType.PeerReference.Handle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ internal partial class MyClassInvoker : MyClass {

public MyClassInvoker (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) {}

internal new static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClassInvoker));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClassInvoker));

public override global::Java.Interop.JniPeerMembers JniPeerMembers {
get { return _members; }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
internal new static readonly JniPeerMembers _members = new JniPeerMembers ("com/mypackage/foo", typeof (Com.MyPackage.Foo));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("com/mypackage/foo", typeof (Com.MyPackage.Foo));

public override global::Java.Interop.JniPeerMembers JniPeerMembers {
get { return _members; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public abstract class MyInterface : Java.Lang.Object {
}


new static JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (MyInterface));
static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (MyInterface));
}

[Register ("java/code/IMyInterface", DoNotGenerateAcw=true)]
Expand Down Expand Up @@ -70,7 +70,7 @@ public partial interface IMyInterface : IJavaObject, IJavaPeerable {
[global::Android.Runtime.Register ("java/code/IMyInterface", DoNotGenerateAcw=true)]
internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterface {

internal new static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));

static IntPtr java_class_ref {
get { return _members.JniPeerType.PeerReference.Handle; }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[global::Android.Runtime.Register ("java/code/IMyInterface", DoNotGenerateAcw=true)]
internal partial class IMyInterfaceInvoker : global::Java.Lang.Object, IMyInterface {

internal new static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));
internal static new readonly JniPeerMembers _members = new JniPeerMembers ("java/code/IMyInterface", typeof (IMyInterfaceInvoker));

static IntPtr java_class_ref {
get { return _members.JniPeerType.PeerReference.Handle; }
Expand Down
Loading

0 comments on commit fd774a5

Please sign in to comment.