diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs index 3e871f0f3..093320b92 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs @@ -101,6 +101,10 @@ void AddPropertyAccessors () // ContainsProperty() check is required here to not exclude such methods // that are known to be property. AbstractSelectionKey.IsValid is an example. unmatched.Add (m); + else if (Fields.Any (f => f.Name.Equals (prop_name, StringComparison.OrdinalIgnoreCase))) + // This is to filter out those method where there is already a field with same name + // i.e.: Item (field) and GetItem (method) + unmatched.Add (m); else { if (prop_hash.ContainsKey (prop_name)) { if (m.Name.StartsWith ("Get")) diff --git a/tools/generator/Tests/expected/InterfaceMethodsConflict/InterfaceMethodsConflict.xml b/tools/generator/Tests/expected/InterfaceMethodsConflict/InterfaceMethodsConflict.xml index e83a6e37a..f24e2a4ff 100644 --- a/tools/generator/Tests/expected/InterfaceMethodsConflict/InterfaceMethodsConflict.xml +++ b/tools/generator/Tests/expected/InterfaceMethodsConflict/InterfaceMethodsConflict.xml @@ -28,6 +28,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/generator/Tests/expected/InterfaceMethodsConflict/Xamarin.Test.FieldMethodNameColisionClass.cs b/tools/generator/Tests/expected/InterfaceMethodsConflict/Xamarin.Test.FieldMethodNameColisionClass.cs new file mode 100644 index 000000000..6f8941e67 --- /dev/null +++ b/tools/generator/Tests/expected/InterfaceMethodsConflict/Xamarin.Test.FieldMethodNameColisionClass.cs @@ -0,0 +1,346 @@ +using System; +using System.Collections.Generic; +using Android.Runtime; + +namespace Xamarin.Test { + + // Metadata.xml XPath class reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']" + [global::Android.Runtime.Register ("xamarin/test/FieldMethodNameColisionClass", DoNotGenerateAcw=true)] + public partial class FieldMethodNameColisionClass : global::Java.Lang.Object { + + + // Metadata.xml XPath field reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/field[@name='ABC']" + [Register ("ABC")] + public const bool Abc = (bool) true; + + static IntPtr item_jfieldId; + + // Metadata.xml XPath field reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/field[@name='item']" + [Register ("item")] + public int Item { + get { + if (item_jfieldId == IntPtr.Zero) + item_jfieldId = JNIEnv.GetFieldID (class_ref, "item", "I"); + return JNIEnv.GetIntField (((global::Java.Lang.Object) this).Handle, item_jfieldId); + } + set { + if (item_jfieldId == IntPtr.Zero) + item_jfieldId = JNIEnv.GetFieldID (class_ref, "item", "I"); + try { + JNIEnv.SetField (((global::Java.Lang.Object) this).Handle, item_jfieldId, value); + } finally { + } + } + } + + static IntPtr name_jfieldId; + + // Metadata.xml XPath field reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/field[@name='name']" + [Register ("name")] + public string Name { + get { + if (name_jfieldId == IntPtr.Zero) + name_jfieldId = JNIEnv.GetFieldID (class_ref, "name", "Ljava/lang/String;"); + IntPtr __ret = JNIEnv.GetObjectField (((global::Java.Lang.Object) this).Handle, name_jfieldId); + return JNIEnv.GetString (__ret, JniHandleOwnership.TransferLocalRef); + } + set { + if (name_jfieldId == IntPtr.Zero) + name_jfieldId = JNIEnv.GetFieldID (class_ref, "name", "Ljava/lang/String;"); + IntPtr native_value = JNIEnv.NewString (value); + try { + JNIEnv.SetField (((global::Java.Lang.Object) this).Handle, name_jfieldId, native_value); + } finally { + JNIEnv.DeleteLocalRef (native_value); + } + } + } + internal static new IntPtr java_class_handle; + internal static new IntPtr class_ref { + get { + return JNIEnv.FindClass ("xamarin/test/FieldMethodNameColisionClass", ref java_class_handle); + } + } + + protected override IntPtr ThresholdClass { + get { return class_ref; } + } + + protected override global::System.Type ThresholdType { + get { return typeof (FieldMethodNameColisionClass); } + } + + protected FieldMethodNameColisionClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {} + + static Delegate cb_getNumber; +#pragma warning disable 0169 + static Delegate GetGetNumberHandler () + { + if (cb_getNumber == null) + cb_getNumber = JNINativeWrapper.CreateDelegate ((Func) n_GetNumber); + return cb_getNumber; + } + + static int n_GetNumber (IntPtr jnienv, IntPtr native__this) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + return __this.Number; + } +#pragma warning restore 0169 + + static Delegate cb_setNumber_I; +#pragma warning disable 0169 + static Delegate GetSetNumber_IHandler () + { + if (cb_setNumber_I == null) + cb_setNumber_I = JNINativeWrapper.CreateDelegate ((Action) n_SetNumber_I); + return cb_setNumber_I; + } + + static void n_SetNumber_I (IntPtr jnienv, IntPtr native__this, int item) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + __this.Number = item; + } +#pragma warning restore 0169 + + static IntPtr id_getNumber; + static IntPtr id_setNumber_I; + public virtual unsafe int Number { + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='getNumber' and count(parameter)=0]" + [Register ("getNumber", "()I", "GetGetNumberHandler")] + get { + if (id_getNumber == IntPtr.Zero) + id_getNumber = JNIEnv.GetMethodID (class_ref, "getNumber", "()I"); + try { + + if (((object) this).GetType () == ThresholdType) + return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getNumber); + else + return JNIEnv.CallNonvirtualIntMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "getNumber", "()I")); + } finally { + } + } + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='setNumber' and count(parameter)=1 and parameter[1][@type='int']]" + [Register ("setNumber", "(I)V", "GetSetNumber_IHandler")] + set { + if (id_setNumber_I == IntPtr.Zero) + id_setNumber_I = JNIEnv.GetMethodID (class_ref, "setNumber", "(I)V"); + try { + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (value); + + if (((object) this).GetType () == ThresholdType) + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setNumber_I, __args); + else + JNIEnv.CallNonvirtualVoidMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "setNumber", "(I)V"), __args); + } finally { + } + } + } + + static Delegate cb_getYourAge; +#pragma warning disable 0169 + static Delegate GetGetYourAgeHandler () + { + if (cb_getYourAge == null) + cb_getYourAge = JNINativeWrapper.CreateDelegate ((Func) n_GetYourAge); + return cb_getYourAge; + } + + static int n_GetYourAge (IntPtr jnienv, IntPtr native__this) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + return __this.YourAge; + } +#pragma warning restore 0169 + + static IntPtr id_getYourAge; + public virtual unsafe int YourAge { + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='getYourAge' and count(parameter)=0]" + [Register ("getYourAge", "()I", "GetGetYourAgeHandler")] + get { + if (id_getYourAge == IntPtr.Zero) + id_getYourAge = JNIEnv.GetMethodID (class_ref, "getYourAge", "()I"); + try { + + if (((object) this).GetType () == ThresholdType) + return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getYourAge); + else + return JNIEnv.CallNonvirtualIntMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "getYourAge", "()I")); + } finally { + } + } + } + + static Delegate cb_setAge_I; +#pragma warning disable 0169 + static Delegate GetSetAge_IHandler () + { + if (cb_setAge_I == null) + cb_setAge_I = JNINativeWrapper.CreateDelegate ((Action) n_SetAge_I); + return cb_setAge_I; + } + + static void n_SetAge_I (IntPtr jnienv, IntPtr native__this, int age) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + __this.SetAge (age); + } +#pragma warning restore 0169 + + static IntPtr id_setAge_I; + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='setAge' and count(parameter)=1 and parameter[1][@type='int']]" + [Register ("setAge", "(I)V", "GetSetAge_IHandler")] + public virtual unsafe void SetAge (int age) + { + if (id_setAge_I == IntPtr.Zero) + id_setAge_I = JNIEnv.GetMethodID (class_ref, "setAge", "(I)V"); + try { + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (age); + + if (((object) this).GetType () == ThresholdType) + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setAge_I, __args); + else + JNIEnv.CallNonvirtualVoidMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "setAge", "(I)V"), __args); + } finally { + } + } + + static Delegate cb_getAbc; +#pragma warning disable 0169 + static Delegate GetGetAbcHandler () + { + if (cb_getAbc == null) + cb_getAbc = JNINativeWrapper.CreateDelegate ((Func) n_GetAbc); + return cb_getAbc; + } + + static bool n_GetAbc (IntPtr jnienv, IntPtr native__this) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + return __this.GetAbc (); + } +#pragma warning restore 0169 + + static IntPtr id_getAbc; + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='getAbc' and count(parameter)=0]" + [Register ("getAbc", "()Z", "GetGetAbcHandler")] + public virtual unsafe bool GetAbc () + { + if (id_getAbc == IntPtr.Zero) + id_getAbc = JNIEnv.GetMethodID (class_ref, "getAbc", "()Z"); + try { + + if (((object) this).GetType () == ThresholdType) + return JNIEnv.CallBooleanMethod (((global::Java.Lang.Object) this).Handle, id_getAbc); + else + return JNIEnv.CallNonvirtualBooleanMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "getAbc", "()Z")); + } finally { + } + } + + static Delegate cb_getItem; +#pragma warning disable 0169 + static Delegate GetGetItemHandler () + { + if (cb_getItem == null) + cb_getItem = JNINativeWrapper.CreateDelegate ((Func) n_GetItem); + return cb_getItem; + } + + static int n_GetItem (IntPtr jnienv, IntPtr native__this) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + return __this.GetItem (); + } +#pragma warning restore 0169 + + static IntPtr id_getItem; + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='getItem' and count(parameter)=0]" + [Register ("getItem", "()I", "GetGetItemHandler")] + public virtual unsafe int GetItem () + { + if (id_getItem == IntPtr.Zero) + id_getItem = JNIEnv.GetMethodID (class_ref, "getItem", "()I"); + try { + + if (((object) this).GetType () == ThresholdType) + return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getItem); + else + return JNIEnv.CallNonvirtualIntMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "getItem", "()I")); + } finally { + } + } + + static Delegate cb_setItem_I; +#pragma warning disable 0169 + static Delegate GetSetItem_IHandler () + { + if (cb_setItem_I == null) + cb_setItem_I = JNINativeWrapper.CreateDelegate ((Action) n_SetItem_I); + return cb_setItem_I; + } + + static void n_SetItem_I (IntPtr jnienv, IntPtr native__this, int item) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + __this.SetItem (item); + } +#pragma warning restore 0169 + + static IntPtr id_setItem_I; + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='setItem' and count(parameter)=1 and parameter[1][@type='int']]" + [Register ("setItem", "(I)V", "GetSetItem_IHandler")] + public virtual unsafe void SetItem (int item) + { + if (id_setItem_I == IntPtr.Zero) + id_setItem_I = JNIEnv.GetMethodID (class_ref, "setItem", "(I)V"); + try { + JValue* __args = stackalloc JValue [1]; + __args [0] = new JValue (item); + + if (((object) this).GetType () == ThresholdType) + JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setItem_I, __args); + else + JNIEnv.CallNonvirtualVoidMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "setItem", "(I)V"), __args); + } finally { + } + } + + static Delegate cb_getName; +#pragma warning disable 0169 + static Delegate GetGetNameHandler () + { + if (cb_getName == null) + cb_getName = JNINativeWrapper.CreateDelegate ((Func) n_GetName); + return cb_getName; + } + + static int n_GetName (IntPtr jnienv, IntPtr native__this) + { + global::Xamarin.Test.FieldMethodNameColisionClass __this = global::Java.Lang.Object.GetObject (jnienv, native__this, JniHandleOwnership.DoNotTransfer); + return __this.GetName (); + } +#pragma warning restore 0169 + + static IntPtr id_getName; + // Metadata.xml XPath method reference: path="/api/package[@name='xamarin.test']/class[@name='FieldMethodNameColisionClass']/method[@name='getName' and count(parameter)=0]" + [Register ("getName", "()I", "GetGetNameHandler")] + public virtual unsafe int GetName () + { + if (id_getName == IntPtr.Zero) + id_getName = JNIEnv.GetMethodID (class_ref, "getName", "()I"); + try { + + if (((object) this).GetType () == ThresholdType) + return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getName); + else + return JNIEnv.CallNonvirtualIntMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "getName", "()I")); + } finally { + } + } + + } +} diff --git a/tools/generator/Tests/generator-Tests.csproj b/tools/generator/Tests/generator-Tests.csproj index 68a150222..665099a4b 100644 --- a/tools/generator/Tests/generator-Tests.csproj +++ b/tools/generator/Tests/generator-Tests.csproj @@ -667,6 +667,9 @@ PreserveNewest + + PreserveNewest +