diff --git a/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs b/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs index 03429747b..34ff92628 100644 --- a/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs +++ b/src/Xamarin.Android.Tools.Bytecode/ClassPath.cs @@ -240,6 +240,16 @@ JavaDocletType GetDocletType (string path) kind = JavaDocletType.Java7; else if (rawHTML.Contains ("Generated by javadoc (1.8")) kind = JavaDocletType.Java8; + + // Check to see if it's an api.xml formatted doc + string rawXML = null; + using (var reader = File.OpenText (path)) { + int len = reader.ReadBlock (buf, 0, buf.Length); + rawXML = new string (buf, 0, len); + } + if (rawXML.Contains ("") && rawXML.Contains (" value) + { + throw new NotImplementedException (); + } + } +} diff --git a/tools/generator/Tests/SupportFiles/Java_Lang_ICharSequence.cs b/tools/generator/Tests/SupportFiles/Java_Lang_ICharSequence.cs new file mode 100644 index 000000000..5011c3188 --- /dev/null +++ b/tools/generator/Tests/SupportFiles/Java_Lang_ICharSequence.cs @@ -0,0 +1,13 @@ +using System; +using Android.Runtime; + +namespace Java.Lang { + + public partial interface ICharSequence : IJavaObject + { + char CharAt (int index); + int Length (); + Java.Lang.ICharSequence SubSequenceFormatted (int start, int end); + string ToString (); + } +} diff --git a/tools/generator/Tests/SupportFiles/Java_Lang_String.cs b/tools/generator/Tests/SupportFiles/Java_Lang_String.cs new file mode 100644 index 000000000..91bc36268 --- /dev/null +++ b/tools/generator/Tests/SupportFiles/Java_Lang_String.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Java.Lang { + + public sealed partial class String : global::Java.Lang.Object, Java.Lang.ICharSequence + { + public String (string value) + { + } + + public char CharAt (int index) + { + throw new NotImplementedException (); + } + + public int Length () + { + throw new NotImplementedException (); + } + + public Java.Lang.ICharSequence SubSequenceFormatted (int start, int end) + { + throw new NotImplementedException (); + } + + public override string ToString () + { + throw new NotImplementedException (); + } + + public IEnumerator GetEnumerator () + { + throw new NotImplementedException (); + } + + IEnumerator IEnumerable.GetEnumerator () + { + throw new NotImplementedException (); + } + } +} diff --git a/tools/generator/Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs b/tools/generator/Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs index 4ebe9d3dd..7ad9c9352 100644 --- a/tools/generator/Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs +++ b/tools/generator/Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs @@ -48,6 +48,33 @@ public partial interface ITestInterface : IJavaObject { [Register ("getSpanFlags", "(Ljava/lang/Object;)I", "GetGetSpanFlags_Ljava_lang_Object_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] int GetSpanFlags (global::Java.Lang.Object tag); + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] + void Append (global::Java.Lang.ICharSequence value); + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] + global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value); + + } + + public static partial class ITestInterfaceExtensions { + + public static void Append (this Test.ME.ITestInterface self, string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + self.Append (jls_value); + jls_value?.Dispose (); + } + + public static string Identity (this Test.ME.ITestInterface self, string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = self.IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } } [global::Android.Runtime.Register ("test/me/TestInterface", DoNotGenerateAcw=true)] @@ -130,6 +157,66 @@ public unsafe int GetSpanFlags (global::Java.Lang.Object tag) return __ret; } + static Delegate cb_append_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetAppend_Ljava_lang_CharSequence_Handler () + { + if (cb_append_Ljava_lang_CharSequence_ == null) + cb_append_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Action) n_Append_Ljava_lang_CharSequence_); + return cb_append_Ljava_lang_CharSequence_; + } + + static void n_Append_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.ITestInterface __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + __this.Append (value); + } +#pragma warning restore 0169 + + IntPtr id_append_Ljava_lang_CharSequence_; + public unsafe void Append (global::Java.Lang.ICharSequence value) + { + if (id_append_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_append_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "append", "(Ljava/lang/CharSequence;)V"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_append_Ljava_lang_CharSequence_, __args); + JNIEnv.DeleteLocalRef (native_value); + } + + static Delegate cb_identity_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetIdentity_Ljava_lang_CharSequence_Handler () + { + if (cb_identity_Ljava_lang_CharSequence_ == null) + cb_identity_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Func) n_Identity_Ljava_lang_CharSequence_); + return cb_identity_Ljava_lang_CharSequence_; + } + + static IntPtr n_Identity_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.ITestInterface __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + IntPtr __ret = CharSequence.ToLocalJniHandle (__this.IdentityFormatted (value)); + return __ret; + } +#pragma warning restore 0169 + + IntPtr id_identity_Ljava_lang_CharSequence_; + public unsafe global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value) + { + if (id_identity_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_identity_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + global::Java.Lang.ICharSequence __ret = global::Java.Lang.Object.GetObject (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_identity_Ljava_lang_CharSequence_, __args), JniHandleOwnership.TransferLocalRef); + JNIEnv.DeleteLocalRef (native_value); + return __ret; + } + } } diff --git a/tools/generator/Tests/expected.ji/TestInterface/Test.ME.TestInterfaceImplementation.cs b/tools/generator/Tests/expected.ji/TestInterface/Test.ME.TestInterfaceImplementation.cs index eec041867..96b7c90c5 100644 --- a/tools/generator/Tests/expected.ji/TestInterface/Test.ME.TestInterfaceImplementation.cs +++ b/tools/generator/Tests/expected.ji/TestInterface/Test.ME.TestInterfaceImplementation.cs @@ -92,6 +92,65 @@ static int n_GetSpanFlags_Ljava_lang_Object_ (IntPtr jnienv, IntPtr native__this [Register ("getSpanFlags", "(Ljava/lang/Object;)I", "GetGetSpanFlags_Ljava_lang_Object_Handler")] public abstract int GetSpanFlags (global::Java.Lang.Object tag); + static Delegate cb_append_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetAppend_Ljava_lang_CharSequence_Handler () + { + if (cb_append_Ljava_lang_CharSequence_ == null) + cb_append_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Action) n_Append_Ljava_lang_CharSequence_); + return cb_append_Ljava_lang_CharSequence_; + } + + static void n_Append_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.TestInterfaceImplementation __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + __this.Append (value); + } +#pragma warning restore 0169 + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler")] + public abstract void Append (global::Java.Lang.ICharSequence value); + + public void Append (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + Append (jls_value); + jls_value?.Dispose (); + } + + static Delegate cb_identity_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetIdentity_Ljava_lang_CharSequence_Handler () + { + if (cb_identity_Ljava_lang_CharSequence_ == null) + cb_identity_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Func) n_Identity_Ljava_lang_CharSequence_); + return cb_identity_Ljava_lang_CharSequence_; + } + + static IntPtr n_Identity_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.TestInterfaceImplementation __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + IntPtr __ret = CharSequence.ToLocalJniHandle (__this.IdentityFormatted (value)); + return __ret; + } +#pragma warning restore 0169 + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler")] + public abstract global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value); + + public string Identity (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } + } [global::Android.Runtime.Register ("test/me/TestInterfaceImplementation", DoNotGenerateAcw=true)] @@ -123,6 +182,46 @@ public override unsafe int GetSpanFlags (global::Java.Lang.Object tag) } } + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler")] + public override unsafe void Append (global::Java.Lang.ICharSequence value) + { + const string __id = "append.(Ljava/lang/CharSequence;)V"; + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + try { + JniArgumentValue* __args = stackalloc JniArgumentValue [1]; + __args [0] = new JniArgumentValue (native_value); + _members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args); + } finally { + JNIEnv.DeleteLocalRef (native_value); + } + } + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler")] + public override unsafe global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value) + { + const string __id = "identity.(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"; + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + try { + JniArgumentValue* __args = stackalloc JniArgumentValue [1]; + __args [0] = new JniArgumentValue (native_value); + var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args); + return global::Java.Lang.Object.GetObject (__rm.Handle, JniHandleOwnership.TransferLocalRef); + } finally { + JNIEnv.DeleteLocalRef (native_value); + } + } + + public string Identity (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } + } } diff --git a/tools/generator/Tests/expected/TestInterface/Test.ME.ITestInterface.cs b/tools/generator/Tests/expected/TestInterface/Test.ME.ITestInterface.cs index 16016b7fc..88deed9f7 100644 --- a/tools/generator/Tests/expected/TestInterface/Test.ME.ITestInterface.cs +++ b/tools/generator/Tests/expected/TestInterface/Test.ME.ITestInterface.cs @@ -48,6 +48,33 @@ public partial interface ITestInterface : IJavaObject { [Register ("getSpanFlags", "(Ljava/lang/Object;)I", "GetGetSpanFlags_Ljava_lang_Object_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] int GetSpanFlags (global::Java.Lang.Object tag); + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] + void Append (global::Java.Lang.ICharSequence value); + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler:Test.ME.ITestInterfaceInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")] + global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value); + + } + + public static partial class ITestInterfaceExtensions { + + public static void Append (this Test.ME.ITestInterface self, string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + self.Append (jls_value); + jls_value?.Dispose (); + } + + public static string Identity (this Test.ME.ITestInterface self, string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = self.IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } } [global::Android.Runtime.Register ("test/me/TestInterface", DoNotGenerateAcw=true)] @@ -122,6 +149,66 @@ public unsafe int GetSpanFlags (global::Java.Lang.Object tag) return __ret; } + static Delegate cb_append_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetAppend_Ljava_lang_CharSequence_Handler () + { + if (cb_append_Ljava_lang_CharSequence_ == null) + cb_append_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Action) n_Append_Ljava_lang_CharSequence_); + return cb_append_Ljava_lang_CharSequence_; + } + + static void n_Append_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.ITestInterface __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + __this.Append (value); + } +#pragma warning restore 0169 + + IntPtr id_append_Ljava_lang_CharSequence_; + public unsafe void Append (global::Java.Lang.ICharSequence value) + { + if (id_append_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_append_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "append", "(Ljava/lang/CharSequence;)V"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_append_Ljava_lang_CharSequence_, __args); + JNIEnv.DeleteLocalRef (native_value); + } + + static Delegate cb_identity_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetIdentity_Ljava_lang_CharSequence_Handler () + { + if (cb_identity_Ljava_lang_CharSequence_ == null) + cb_identity_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Func) n_Identity_Ljava_lang_CharSequence_); + return cb_identity_Ljava_lang_CharSequence_; + } + + static IntPtr n_Identity_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.ITestInterface __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + IntPtr __ret = CharSequence.ToLocalJniHandle (__this.IdentityFormatted (value)); + return __ret; + } +#pragma warning restore 0169 + + IntPtr id_identity_Ljava_lang_CharSequence_; + public unsafe global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value) + { + if (id_identity_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_identity_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + global::Java.Lang.ICharSequence __ret = global::Java.Lang.Object.GetObject (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_identity_Ljava_lang_CharSequence_, __args), JniHandleOwnership.TransferLocalRef); + JNIEnv.DeleteLocalRef (native_value); + return __ret; + } + } } diff --git a/tools/generator/Tests/expected/TestInterface/Test.ME.TestInterfaceImplementation.cs b/tools/generator/Tests/expected/TestInterface/Test.ME.TestInterfaceImplementation.cs index 51abaf9ef..12b568ff6 100644 --- a/tools/generator/Tests/expected/TestInterface/Test.ME.TestInterfaceImplementation.cs +++ b/tools/generator/Tests/expected/TestInterface/Test.ME.TestInterfaceImplementation.cs @@ -98,6 +98,65 @@ static int n_GetSpanFlags_Ljava_lang_Object_ (IntPtr jnienv, IntPtr native__this [Register ("getSpanFlags", "(Ljava/lang/Object;)I", "GetGetSpanFlags_Ljava_lang_Object_Handler")] public abstract int GetSpanFlags (global::Java.Lang.Object tag); + static Delegate cb_append_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetAppend_Ljava_lang_CharSequence_Handler () + { + if (cb_append_Ljava_lang_CharSequence_ == null) + cb_append_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Action) n_Append_Ljava_lang_CharSequence_); + return cb_append_Ljava_lang_CharSequence_; + } + + static void n_Append_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.TestInterfaceImplementation __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + __this.Append (value); + } +#pragma warning restore 0169 + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler")] + public abstract void Append (global::Java.Lang.ICharSequence value); + + public void Append (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + Append (jls_value); + jls_value?.Dispose (); + } + + static Delegate cb_identity_Ljava_lang_CharSequence_; +#pragma warning disable 0169 + static Delegate GetIdentity_Ljava_lang_CharSequence_Handler () + { + if (cb_identity_Ljava_lang_CharSequence_ == null) + cb_identity_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Func) n_Identity_Ljava_lang_CharSequence_); + return cb_identity_Ljava_lang_CharSequence_; + } + + static IntPtr n_Identity_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_value) + { + global::Test.ME.TestInterfaceImplementation __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + global::Java.Lang.ICharSequence value = global::Java.Lang.Object.GetObject (native_value, JniHandleOwnership.DoNotTransfer); + IntPtr __ret = CharSequence.ToLocalJniHandle (__this.IdentityFormatted (value)); + return __ret; + } +#pragma warning restore 0169 + + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler")] + public abstract global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value); + + public string Identity (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } + } [global::Android.Runtime.Register ("test/me/TestInterfaceImplementation", DoNotGenerateAcw=true)] @@ -125,6 +184,50 @@ public override unsafe int GetSpanFlags (global::Java.Lang.Object tag) } } + static IntPtr id_append_Ljava_lang_CharSequence_; + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='append' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("append", "(Ljava/lang/CharSequence;)V", "GetAppend_Ljava_lang_CharSequence_Handler")] + public override unsafe void Append (global::Java.Lang.ICharSequence value) + { + if (id_append_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_append_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "append", "(Ljava/lang/CharSequence;)V"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + try { + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_append_Ljava_lang_CharSequence_, __args); + } finally { + JNIEnv.DeleteLocalRef (native_value); + } + } + + static IntPtr id_identity_Ljava_lang_CharSequence_; + // Metadata.xml XPath method reference: path="/api/package[@name='test.me']/interface[@name='TestInterface']/method[@name='identity' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]" + [Register ("identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;", "GetIdentity_Ljava_lang_CharSequence_Handler")] + public override unsafe global::Java.Lang.ICharSequence IdentityFormatted (global::Java.Lang.ICharSequence value) + { + if (id_identity_Ljava_lang_CharSequence_ == IntPtr.Zero) + id_identity_Ljava_lang_CharSequence_ = JNIEnv.GetMethodID (class_ref, "identity", "(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"); + IntPtr native_value = CharSequence.ToLocalJniHandle (value); + try { + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (native_value); + global::Java.Lang.ICharSequence __ret = global::Java.Lang.Object.GetObject (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_identity_Ljava_lang_CharSequence_, __args), JniHandleOwnership.TransferLocalRef); + return __ret; + } finally { + JNIEnv.DeleteLocalRef (native_value); + } + } + + public string Identity (string value) + { + global::Java.Lang.String jls_value = value == null ? null : new global::Java.Lang.String (value); + global::Java.Lang.ICharSequence __result = IdentityFormatted (jls_value); + var __rsval = __result?.ToString (); + jls_value?.Dispose (); + return __rsval; + } + } } diff --git a/tools/generator/Tests/expected/TestInterface/TestInterface.xml b/tools/generator/Tests/expected/TestInterface/TestInterface.xml index b4905662d..c707d3ecf 100644 --- a/tools/generator/Tests/expected/TestInterface/TestInterface.xml +++ b/tools/generator/Tests/expected/TestInterface/TestInterface.xml @@ -18,6 +18,9 @@ default void defaultInterfaceMethod() { } + + void append(CharSequence value); + CharSequence identity(CharSequence value); } --> @@ -31,6 +34,12 @@ + + + + + +