Skip to content

Commit 054dd3a

Browse files
committed
[generator] Emit partial method for peer constructor
Context: dotnet#1085 Context: dotnet/runtime#82121 Some Java objects are *big*, e.g. [`Bitmap`][0] instances, but as far as MonoVM is concerned, the `Bitmap` instances are *tiny*: a few pointers, and that's it. MonoVM doesn't know that it could be referencing several MB of data in the Java VM. MonoVM is gaining support for [`GC.AddMemoryPressure()`][1] and [`GC.RemoveMemoryPressure()`][2], which potentially allows for the parent of all cross-VM GC integrations: using the `GC` methods to inform MonoVM of how much non-managed memory has been allocated. This could allow MonoVM to collect more frequently when total process memory is low. How should we call `GC.AddMemoryPressure()` and `GC.RemoveMemoryPressure()`? `GC.RemoveMemoryPressure()` is straightforward: a class can override `Java.Lang.Object.Dispose(bool)`. `GC.AddMemoryPressure()` is the problem: where and how can it be called from a class binding? This is trickier, as there was no way to have custom code called by the bound type. Instead, various forms of "hacky workarounds" are often employed, e.g. copying `generator`-emitted content into a `partial` class, then using `metadata` to *prevent* `generator` from binding those members. It's all around fugly. Fortunately C# has a solution: [`partial` methods][3]! We take our existing "peer constructor" generation code, a'la: partial class Bitmap : Java.Lang.Object { internal Bitmap (IntPtr h, JniHandleOwnership t) : base (h, t) { } } and extend it to: partial class Bitmap : Java.Lang.Object { partial void _OnBitmapCreated (); internal Bitmap (IntPtr h, JniHandleOwnership t) : base (h, t) { _OnBitmapCreated (); } } This allows a `partial class Bitmap` to do: // Hand-written code partial class Bitmap { int _memoryPressure; partial void _OnBitmapCreated () { _memoryPressure = ByteCount; GC.AddMemoryPressure (_memoryPressure); } protected override void Dispose (bool disposing) { if (_memoryPressure != 0) { GC.RemoveMemoryPressure (_memoryPressure); _memoryPressure = 0; } } } TODO: Are there any other places where such `partial` methods would be useful? This appears to be the minimum required for this scenario. [0]: https://developer.android.com/reference/android/graphics/Bitmap [1]: https://learn.microsoft.com/dotnet/api/system.gc.addmemorypressure?view=net-7.0 [2]: https://learn.microsoft.com/dotnet/api/system.gc.removememorypressure?view=net-7.0 [3]: https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/partial-method
1 parent 73ebad2 commit 054dd3a

File tree

96 files changed

+401
-0
lines changed

Some content is hidden

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

96 files changed

+401
-0
lines changed

src/Xamarin.SourceWriter/Models/MethodWriter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,16 @@ public void SetVisibility (string visibility)
5252

5353
public virtual void Write (CodeWriter writer)
5454
{
55+
WritePartialMethodDeclaration (writer);
5556
WriteComments (writer);
5657
WriteAttributes (writer);
5758
WriteSignature (writer);
5859
}
5960

61+
public virtual void WritePartialMethodDeclaration (CodeWriter writer)
62+
{
63+
}
64+
6065
public virtual void WriteComments (CodeWriter writer)
6166
{
6267
foreach (var c in Comments)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
public partial class MyClass {
44
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
55

6+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
7+
partial void _OnMyClassCreated ();
8+
69
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
710
{
11+
_OnMyClassCreated ();
812
}
913

1014
// Metadata.xml XPath constructor reference: path="/api/package[@name='java.code']/class[@name='MyClass']/constructor[@name='MyClass' and count(parameter)=0]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
public partial class MyClass {
44
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
55

6+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
7+
partial void _OnMyClassCreated ();
8+
69
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
710
{
11+
_OnMyClassCreated ();
812
}
913

1014
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint[]']]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
public partial class MyClass {
44
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
55

6+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
7+
partial void _OnMyClassCreated ();
8+
69
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
710
{
11+
_OnMyClassCreated ();
812
}
913

1014
public unsafe Java.Interop.JavaInt32Array? UIntProp {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
public partial class MyClass {
44
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
55

6+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
7+
partial void _OnMyClassCreated ();
8+
69
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
710
{
11+
_OnMyClassCreated ();
812
}
913

1014
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint']]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
public partial class MyClass {
44
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
55

6+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
7+
partial void _OnMyClassCreated ();
8+
69
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
710
{
11+
_OnMyClassCreated ();
812
}
913

1014
public unsafe uint UIntProp {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ public partial class MyClass : Java.Lang.Object {
99
get { return _members; }
1010
}
1111

12+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
13+
partial void _OnMyClassCreated ();
14+
1215
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
1316
{
17+
_OnMyClassCreated ();
1418
}
1519

1620
// 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[]']]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ public partial class MyClass {
2323

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

26+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
27+
partial void _OnMyClassCreated ();
28+
2629
protected MyClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2730
{
31+
_OnMyClassCreated ();
2832
}
2933

3034
}

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1-NRT/WriteClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
// Metadata.xml XPath constructor reference: path="/api/package[@name='java.code']/class[@name='MyClass']/constructor[@name='MyClass' and count(parameter)=0]"

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1-NRT/WriteMethodWithCharSequenceArrays.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class MyClass : Java.Lang.Object {
2525
get { return _members.ManagedPeerType; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnMyClassCreated ();
30+
2831
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
2932
{
33+
_OnMyClassCreated ();
3034
}
3135

3236
static Delegate? cb_echo_arrayLjava_lang_CharSequence_;

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1-NRT/WriteObjectField.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ public partial class MyClass {
2929
get { return _members.JniPeerType.PeerReference.Handle; }
3030
}
3131

32+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
33+
partial void _OnMyClassCreated ();
34+
3235
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
3336
{
37+
_OnMyClassCreated ();
3438
}
3539

3640
}

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
// Metadata.xml XPath constructor reference: path="/api/package[@name='java.code']/class[@name='MyClass']/constructor[@name='MyClass' and count(parameter)=0]"

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteKotlinUnsignedArrayTypeMethodsClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint[]']]"

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteKotlinUnsignedArrayTypePropertiesClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
public unsafe uint[] UIntProp {

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteKotlinUnsignedTypeMethodsClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint']]"

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteKotlinUnsignedTypePropertiesClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public partial class MyClass {
77
get { return _members.JniPeerType.PeerReference.Handle; }
88
}
99

10+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
11+
partial void _OnMyClassCreated ();
12+
1013
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
1114
{
15+
_OnMyClassCreated ();
1216
}
1317

1418
public unsafe uint UIntProp {

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteMethodWithCharSequenceArrays.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class MyClass : Java.Lang.Object {
2525
get { return _members.ManagedPeerType; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnMyClassCreated ();
30+
2831
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
2932
{
33+
_OnMyClassCreated ();
3034
}
3135

3236
static Delegate cb_echo_arrayLjava_lang_CharSequence_;

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteNestedInterfaceClass.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ public partial interface IParent : IJavaObject, IJavaPeerable {
3434
get { return _members.ManagedPeerType; }
3535
}
3636

37+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
38+
partial void _OnChildCreated ();
39+
3740
protected Child (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
3841
{
42+
_OnChildCreated ();
3943
}
4044

4145
}

tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteObjectField.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ public partial class MyClass {
2929
get { return _members.JniPeerType.PeerReference.Handle; }
3030
}
3131

32+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
33+
partial void _OnMyClassCreated ();
34+
3235
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
3336
{
37+
_OnMyClassCreated ();
3438
}
3539

3640
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class BasePublicClass : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnBasePublicClassCreated ();
30+
2831
protected BasePublicClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnBasePublicClassCreated ();
3034
}
3135

3236
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='BasePublicClass']/method[@name='baseMethod' and count(parameter)=0]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class ExtendPublicClass : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnExtendPublicClassCreated ();
30+
2831
protected ExtendPublicClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnExtendPublicClassCreated ();
3034
}
3135

3236
// Metadata.xml XPath constructor reference: path="/api/package[@name='xamarin.test']/class[@name='ExtendPublicClass']/constructor[@name='ExtendPublicClass' and count(parameter)=0]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ protected internal partial interface IProtectedInterface : IJavaPeerable {
3434
get { return _members; }
3535
}
3636

37+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
38+
partial void _OnPublicClassCreated ();
39+
3740
protected PublicClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
3841
{
42+
_OnPublicClassCreated ();
3943
}
4044

4145
// Metadata.xml XPath constructor reference: path="/api/package[@name='xamarin.test']/class[@name='PublicClass']/constructor[@name='PublicClass' and count(parameter)=0]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public sealed partial class PublicFinalClass : global::Xamarin.Test.BasePublicCl
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnPublicFinalClassCreated ();
30+
2831
internal PublicFinalClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnPublicFinalClassCreated ();
3034
}
3135

3236
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='PublicFinalClass']/method[@name='publicMethod' and count(parameter)=0]"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class TestClass : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnTestClassCreated ();
30+
2831
protected TestClass (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnTestClassCreated ();
3034
}
3135

3236
// Metadata.xml XPath constructor reference: path="/api/package[@name='xamarin.test']/class[@name='TestClass']/constructor[@name='TestClass' and count(parameter)=0]"

tests/generator-Tests/expected.ji/Android.Graphics.Color/Xamarin.Test.SomeObject.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public abstract partial class SomeObject : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnSomeObjectCreated ();
30+
2831
protected SomeObject (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnSomeObjectCreated ();
3034
}
3135

3236
}

tests/generator-Tests/expected.ji/Arrays/Xamarin.Test.SomeObject.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,12 @@ public partial class SomeObject : global::Java.Lang.Object {
165165
get { return _members; }
166166
}
167167

168+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
169+
partial void _OnSomeObjectCreated ();
170+
168171
protected SomeObject (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
169172
{
173+
_OnSomeObjectCreated ();
170174
}
171175

172176
}

tests/generator-Tests/expected.ji/CSharpKeywords/Xamarin.Test.CSharpKeywords.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class CSharpKeywords : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnCSharpKeywordsCreated ();
30+
2831
protected CSharpKeywords (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnCSharpKeywordsCreated ();
3034
}
3135

3236
// Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='CSharpKeywords']/method[@name='usePartial' and count(parameter)=1 and parameter[1][@type='int']]"

tests/generator-Tests/expected.ji/Constructors/Xamarin.Test.SomeObject.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class SomeObject : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnSomeObjectCreated ();
30+
2831
protected SomeObject (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnSomeObjectCreated ();
3034
}
3135

3236
// Metadata.xml XPath constructor reference: path="/api/package[@name='xamarin.test']/class[@name='SomeObject']/constructor[@name='SomeObject' and count(parameter)=0]"

tests/generator-Tests/expected.ji/Constructors/Xamarin.Test.SomeObject2.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public sealed partial class SomeObject2 : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnSomeObject2Created ();
30+
2831
internal SomeObject2 (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnSomeObject2Created ();
3034
}
3135

3236
// Metadata.xml XPath constructor reference: path="/api/package[@name='xamarin.test']/class[@name='SomeObject2']/constructor[@name='SomeObject2' and count(parameter)=1 and parameter[1][@type='int']]"

tests/generator-Tests/expected.ji/Core_ClassParse/Java.Lang.String.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ public partial class String : global::Java.Lang.Object {
2525
get { return _members; }
2626
}
2727

28+
/// <summary>Extension point; called when creating a Managed Peer around a preexisting Java Peer instance.</summary>
29+
partial void _OnStringCreated ();
30+
2831
protected String (ref JniObjectReference reference, JniObjectReferenceOptions options) : base (ref reference, options)
2932
{
33+
_OnStringCreated ();
3034
}
3135

3236
}

0 commit comments

Comments
 (0)