Skip to content

Changes in files when Build Solution #7449

Description

@kuldeepgupta7

Android application type

Classic Xamarin.Android (MonoAndroid12.0, etc.)

Affected platform version

VS2022

Description

I was trying to Bind Android Library (kotlin) in Xamarin but every time when I Build solution or restart, need to do changes in these files
Com.Sdk.Utils.Validationutils.FixedLengthValidator.cs
Com.Sdk.Utils.Validationutils.MaxLengthValidator.cs
Com.Sdk.Utils.Validationutils.MinLengthValidator.cs
Com.Sdk.Utils.Validationutils.NonEmptyValidator.cs
Com.Sdk.Utils.Validationutils.NullValidator.cs
Com.Sdk.Utils.Validationutils.RangeLengthValidator.cs
path is:- AppName\obj\Debug\generated\src

and these files
AppName\obj\Debug\120\lp\113\jl\res\values.xml
AppName\obj\Debug\120\lp\113\jl\res\values-fr.xml

and this 113 value change every time mostly it is 3.

Kotlin code for NonEmptyValidator is:-

open class NonEmptyValidator : Validator {

    private var value: String? = null

    override fun afterTextChanged(s: Editable) {
        value = s.toString().trim { it <= ' ' }
    }

    @Suppress("EmptyFunctionBlock")
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

    @Suppress("EmptyFunctionBlock")
    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}

    override fun getValue(): String? {
        return value
    }

    override fun hasFullLength(): Boolean {
        return this.isValid
    }

    override fun isValid(): Boolean {
        return value != null && value!!.isNotEmpty()
    }

    override fun filter(source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int,
                        dend: Int): CharSequence? {
        return null
    }
}

Steps to Reproduce

1.Create new project in Android Binding Library.
2. Add library in jars folder.
3. Change file property to LibraryProjectZip.
4. Build project.
5. Add new project with this project.
6. Add new build .dll file in side new project references folder.
7. Add required dependency.
8. Build solution.

Did you find any workaround?

No response

Relevant log output

No response

Activity

  1. jpobst commented on Oct 10, 2022

    @jpobst
    Contributor

    It is not intended to modify the generated files directly. The generation is not a one time event, they are generated every time the project is rebuilt, so any changes you make will be overwritten. You will need to use alternate methods to affect the binding process until it is able to produce bindings that compile.

    Generally the process used is referred to as "metadata". There is documentation on the process as well as details on how to fix some common issues here: https://github.com/xamarin/java.interop/wiki/Troubleshooting-Android-Bindings-Issues.

  2. added
    Area: BindingsIssues in Java Library Binding projects.
    and removed
    needs-triageIssues that need to be assigned.
    on Oct 10, 2022
  3. kuldeepgupta7 commented on Oct 13, 2022

    @kuldeepgupta7
    Author

    What we can do at SDK side to avoid this changes in Xamarin
    Code which give error:-

    using System;
    using System.Collections.Generic;
    using Android.Runtime;
    using Java.Interop;
    
    namespace Com.Paymentus.Sdk.Utils.Validationutils {
    
    // Metadata.xml XPath class reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']"
    [global::Android.Runtime.Register ("com/paymentus/sdk/utils/validationutils/NonEmptyValidator", DoNotGenerateAcw=true)]
    public partial class NonEmptyValidator : global::Java.Lang.Object, global::Com.Paymentus.Sdk.Utils.Validationutils.IValidator {
    	static readonly JniPeerMembers _members = new XAPeerMembers ("com/paymentus/sdk/utils/validationutils/NonEmptyValidator", typeof (NonEmptyValidator));
    
    	internal static IntPtr class_ref {
    		get { return _members.JniPeerType.PeerReference.Handle; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	public override global::Java.Interop.JniPeerMembers JniPeerMembers {
    		get { return _members; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	protected override IntPtr ThresholdClass {
    		get { return _members.JniPeerType.PeerReference.Handle; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	protected override global::System.Type ThresholdType {
    		get { return _members.ManagedPeerType; }
    	}
    
    	protected NonEmptyValidator (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
    	{
    	}
    
    	// Metadata.xml XPath constructor reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/constructor[@name='NonEmptyValidator' and count(parameter)=0]"
    	[Register (".ctor", "()V", "")]
    	public unsafe NonEmptyValidator () : base (IntPtr.Zero, JniHandleOwnership.DoNotTransfer)
    	{
    		const string __id = "()V";
    
    		if (((global::Java.Lang.Object) this).Handle != IntPtr.Zero)
    			return;
    
    		try {
    			var __r = _members.InstanceMethods.StartCreateInstance (__id, ((object) this).GetType (), null);
    			SetHandle (__r.Handle, JniHandleOwnership.TransferLocalRef);
    			_members.InstanceMethods.FinishCreateInstance (__id, this, null);
    		} finally {
    		}
    	}
    
    	static Delegate cb_hasFullLength;
    static Delegate GetHasFullLengthHandler ()
    {
    if (cb_hasFullLength == null)
    cb_hasFullLength = JNINativeWrapper.CreateDelegate ((_JniMarshal_PP_Z) n_HasFullLength);
    return cb_hasFullLength;
    }
    
    	static bool n_HasFullLength (IntPtr jnienv, IntPtr native__this)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		return __this.HasFullLength;
    	}
    
    	public virtual unsafe bool HasFullLength {
    		// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='hasFullLength' and count(parameter)=0]"
    		[Register ("hasFullLength", "()Z", "GetHasFullLengthHandler")]
    		get {
    			const string __id = "hasFullLength.()Z";
    			try {
    				var __rm = _members.InstanceMethods.InvokeVirtualBooleanMethod (__id, this, null);
    				return __rm;
    			} finally {
    			}
    		}
    	}
    
    	static Delegate cb_afterTextChanged_Landroid_text_Editable_;
    static Delegate GetAfterTextChanged_Landroid_text_Editable_Handler ()
    {
    if (cb_afterTextChanged_Landroid_text_Editable_ == null)
    cb_afterTextChanged_Landroid_text_Editable_ = JNINativeWrapper.CreateDelegate ((JniMarshal_PPL_V) n_AfterTextChanged_Landroid_text_Editable);
    return cb_afterTextChanged_Landroid_text_Editable_;
    }
    
    	static void n_AfterTextChanged_Landroid_text_Editable_ (IntPtr jnienv, IntPtr native__this, IntPtr native_s)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = (global::Android.Text.IEditable)global::Java.Lang.Object.GetObject<global::Android.Text.IEditable> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.AfterTextChanged (s);
    	}
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='afterTextChanged' and count(parameter)=1 and parameter[1][@type='android.text.Editable']]"
    	[Register ("afterTextChanged", "(Landroid/text/Editable;)V", "GetAfterTextChanged_Landroid_text_Editable_Handler")]
    	public virtual unsafe void AfterTextChanged (global::Android.Text.IEditable s)
    	{
    		const string __id = "afterTextChanged.(Landroid/text/Editable;)V";
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [1];
    			__args [0] = new JniArgumentValue ((s == null) ? IntPtr.Zero : ((global::Java.Lang.Object) s).Handle);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	static Delegate cb_beforeTextChanged_Ljava_lang_CharSequence_III;
    static Delegate GetBeforeTextChanged_Ljava_lang_CharSequence_IIIHandler ()
    {
    if (cb_beforeTextChanged_Ljava_lang_CharSequence_III == null)
    cb_beforeTextChanged_Ljava_lang_CharSequence_III = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIII_V) n_BeforeTextChanged_Ljava_lang_CharSequence_III);
    return cb_beforeTextChanged_Ljava_lang_CharSequence_III;
    }
    
    	static void n_BeforeTextChanged_Ljava_lang_CharSequence_III (IntPtr jnienv, IntPtr native__this, IntPtr native_s, int start, int count, int after)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.BeforeTextChanged (s, start, count, after);
    	}
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='beforeTextChanged' and count(parameter)=4 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='int']]"
    	[Register ("beforeTextChanged", "(Ljava/lang/CharSequence;III)V", "GetBeforeTextChanged_Ljava_lang_CharSequence_IIIHandler")]
    	public virtual unsafe void BeforeTextChanged (global::Java.Lang.ICharSequence s, int start, int count, int after)
    	{
    		const string __id = "beforeTextChanged.(Ljava/lang/CharSequence;III)V";
    		IntPtr native_s = CharSequence.ToLocalJniHandle (s);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [4];
    			__args [0] = new JniArgumentValue (native_s);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (count);
    			__args [3] = new JniArgumentValue (after);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_s);
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	public void BeforeTextChanged (string s, int start, int count, int after)
    	{
    		var jls_s = s == null ? null : new global::Java.Lang.String (s);
    		BeforeTextChanged (jls_s, start, count, after);
    		jls_s?.Dispose ();
    	}
    
    	static Delegate cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II;
    static Delegate GetFilter_Ljava_lang_CharSequence_IILandroid_text_Spanned_IIHandler ()
    {
    if (cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II == null)
    cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIILII_L) n_Filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II);
    return cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II;
    }
    
    	static IntPtr n_Filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II (IntPtr jnienv, IntPtr native__this, IntPtr native_source, int start, int end, IntPtr native_dest, int dstart, int dend)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var source = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_source, JniHandleOwnership.DoNotTransfer);
    		var dest = (global::Android.Text.ISpanned)global::Java.Lang.Object.GetObject<global::Android.Text.ISpanned> (native_dest, JniHandleOwnership.DoNotTransfer);
    		IntPtr __ret = CharSequence.ToLocalJniHandle (__this.FilterFormatted (source, start, end, dest, dstart, dend));
    		return __ret;
    	}
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='filter' and count(parameter)=6 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='android.text.Spanned'] and parameter[5][@type='int'] and parameter[6][@type='int']]"
    	[Register ("filter", "(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;", "GetFilter_Ljava_lang_CharSequence_IILandroid_text_Spanned_IIHandler")]
    	public virtual unsafe global::Java.Lang.ICharSequence FilterFormatted (global::Java.Lang.ICharSequence source, int start, int end, global::Android.Text.ISpanned dest, int dstart, int dend)
    	{
    		const string __id = "filter.(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;";
    		IntPtr native_source = CharSequence.ToLocalJniHandle (source);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [6];
    			__args [0] = new JniArgumentValue (native_source);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (end);
    			__args [3] = new JniArgumentValue ((dest == null) ? IntPtr.Zero : ((global::Java.Lang.Object) dest).Handle);
    			__args [4] = new JniArgumentValue (dstart);
    			__args [5] = new JniArgumentValue (dend);
    			var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
    			return global::Java.Lang.Object.GetObject<Java.Lang.ICharSequence> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_source);
    			global::System.GC.KeepAlive (source);
    			global::System.GC.KeepAlive (dest);
    		}
    	}
    
    	public string Filter (string source, int start, int end, global::Android.Text.ISpanned dest, int dstart, int dend)
    	{
    		var jls_source = source == null ? null : new global::Java.Lang.String (source);
    		global::Java.Lang.ICharSequence __result = FilterFormatted (jls_source, start, end, dest, dstart, dend);
    		var __rsval = __result?.ToString ();
    		jls_source?.Dispose ();
    		return __rsval;
    	}
    
    	static Delegate cb_isValid;
    static Delegate GetIsValidHandler ()
    {
    if (cb_isValid == null)
    cb_isValid = JNINativeWrapper.CreateDelegate ((_JniMarshal_PP_L) n_IsValid);
    return cb_isValid;
    }
    
    	static IntPtr n_IsValid (IntPtr jnienv, IntPtr native__this)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		return JNIEnv.ToLocalJniHandle (__this.IsValid ());
    	}
    
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='isValid' and count(parameter)=0]"
    	[Register ("isValid", "()Ljava/lang/Boolean;", "GetIsValidHandler")]
    	public virtual unsafe global::Java.Lang.Boolean IsValid ()
    	{
    		const string __id = "isValid.()Ljava/lang/Boolean;";
    		try {
    			var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
    			return global::Java.Lang.Object.GetObject<global::Java.Lang.Boolean> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
    		} finally {
    		}
    	}
    
    	static Delegate cb_onTextChanged_Ljava_lang_CharSequence_III;
    
    static Delegate GetOnTextChanged_Ljava_lang_CharSequence_IIIHandler ()
    {
    if (cb_onTextChanged_Ljava_lang_CharSequence_III == null)
    cb_onTextChanged_Ljava_lang_CharSequence_III = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIII_V) n_OnTextChanged_Ljava_lang_CharSequence_III);
    return cb_onTextChanged_Ljava_lang_CharSequence_III;
    }
    
    	static void n_OnTextChanged_Ljava_lang_CharSequence_III (IntPtr jnienv, IntPtr native__this, IntPtr native_s, int start, int before, int count)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.OnTextChanged (s, start, before, count);
    	}
    
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='onTextChanged' and count(parameter)=4 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='int']]"
    	[Register ("onTextChanged", "(Ljava/lang/CharSequence;III)V", "GetOnTextChanged_Ljava_lang_CharSequence_IIIHandler")]
    	public virtual unsafe void OnTextChanged (global::Java.Lang.ICharSequence s, int start, int before, int count)
    	{
    		const string __id = "onTextChanged.(Ljava/lang/CharSequence;III)V";
    		IntPtr native_s = CharSequence.ToLocalJniHandle (s);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [4];
    			__args [0] = new JniArgumentValue (native_s);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (before);
    			__args [3] = new JniArgumentValue (count);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_s);
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	public void OnTextChanged (string s, int start, int before, int count)
    	{
    		var jls_s = s == null ? null : new global::Java.Lang.String (s);
    		OnTextChanged (jls_s, start, before, count);
    		jls_s?.Dispose ();
    	}
    
    }
    }
    
    

    After Changes:-

    using System;
    using System.Collections.Generic;
    using Android.Runtime;
    using Java.Interop;
    
    namespace Com.Paymentus.Sdk.Utils.Validationutils {
    
    // Metadata.xml XPath class reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']"
    [global::Android.Runtime.Register ("com/paymentus/sdk/utils/validationutils/NonEmptyValidator", DoNotGenerateAcw=true)]
    public partial class NonEmptyValidator : global::Java.Lang.Object{
    	static readonly JniPeerMembers _members = new XAPeerMembers ("com/paymentus/sdk/utils/validationutils/NonEmptyValidator", typeof (NonEmptyValidator));
    
    	internal static IntPtr class_ref {
    		get { return _members.JniPeerType.PeerReference.Handle; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	public override global::Java.Interop.JniPeerMembers JniPeerMembers {
    		get { return _members; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	protected override IntPtr ThresholdClass {
    		get { return _members.JniPeerType.PeerReference.Handle; }
    	}
    
    	[global::System.Diagnostics.DebuggerBrowsable (global::System.Diagnostics.DebuggerBrowsableState.Never)]
    	[global::System.ComponentModel.EditorBrowsable (global::System.ComponentModel.EditorBrowsableState.Never)]
    	protected override global::System.Type ThresholdType {
    		get { return _members.ManagedPeerType; }
    	}
    
    	protected NonEmptyValidator (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
    	{
    	}
    
    	// Metadata.xml XPath constructor reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/constructor[@name='NonEmptyValidator' and count(parameter)=0]"
    	[Register (".ctor", "()V", "")]
    	public unsafe NonEmptyValidator () : base (IntPtr.Zero, JniHandleOwnership.DoNotTransfer)
    	{
    		const string __id = "()V";
    
    		if (((global::Java.Lang.Object) this).Handle != IntPtr.Zero)
    			return;
    
    		try {
    			var __r = _members.InstanceMethods.StartCreateInstance (__id, ((object) this).GetType (), null);
    			SetHandle (__r.Handle, JniHandleOwnership.TransferLocalRef);
    			_members.InstanceMethods.FinishCreateInstance (__id, this, null);
    		} finally {
    		}
    	}
    
    	static Delegate cb_hasFullLength;
    
    static Delegate GetHasFullLengthHandler ()
    {
    if (cb_hasFullLength == null)
    cb_hasFullLength = JNINativeWrapper.CreateDelegate ((_JniMarshal_PP_Z) n_HasFullLength);
    return cb_hasFullLength;
    }
    
    	static bool n_HasFullLength (IntPtr jnienv, IntPtr native__this)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		return __this.HasFullLength;
    	}
    
    
    	public virtual unsafe bool HasFullLength {
    		// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='hasFullLength' and count(parameter)=0]"
    		[Register ("hasFullLength", "()Z", "GetHasFullLengthHandler")]
    		get {
    			const string __id = "hasFullLength.()Z";
    			try {
    				var __rm = _members.InstanceMethods.InvokeVirtualBooleanMethod (__id, this, null);
    				return __rm;
    			} finally {
    			}
    		}
    	}
    
    	static Delegate cb_afterTextChanged_Landroid_text_Editable_;
    
    static Delegate GetAfterTextChanged_Landroid_text_Editable_Handler ()
    {
    if (cb_afterTextChanged_Landroid_text_Editable_ == null)
    cb_afterTextChanged_Landroid_text_Editable_ = JNINativeWrapper.CreateDelegate ((JniMarshal_PPL_V) n_AfterTextChanged_Landroid_text_Editable);
    return cb_afterTextChanged_Landroid_text_Editable_;
    }
    
    	static void n_AfterTextChanged_Landroid_text_Editable_ (IntPtr jnienv, IntPtr native__this, IntPtr native_s)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = (global::Android.Text.IEditable)global::Java.Lang.Object.GetObject<global::Android.Text.IEditable> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.AfterTextChanged (s);
    	}
    
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='afterTextChanged' and count(parameter)=1 and parameter[1][@type='android.text.Editable']]"
    	[Register ("afterTextChanged", "(Landroid/text/Editable;)V", "GetAfterTextChanged_Landroid_text_Editable_Handler")]
    	public virtual unsafe void AfterTextChanged (global::Android.Text.IEditable s)
    	{
    		const string __id = "afterTextChanged.(Landroid/text/Editable;)V";
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [1];
    			__args [0] = new JniArgumentValue ((s == null) ? IntPtr.Zero : ((global::Java.Lang.Object) s).Handle);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	static Delegate cb_beforeTextChanged_Ljava_lang_CharSequence_III;
    
    static Delegate GetBeforeTextChanged_Ljava_lang_CharSequence_IIIHandler ()
    {
    if (cb_beforeTextChanged_Ljava_lang_CharSequence_III == null)
    cb_beforeTextChanged_Ljava_lang_CharSequence_III = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIII_V) n_BeforeTextChanged_Ljava_lang_CharSequence_III);
    return cb_beforeTextChanged_Ljava_lang_CharSequence_III;
    }
    
    	static void n_BeforeTextChanged_Ljava_lang_CharSequence_III (IntPtr jnienv, IntPtr native__this, IntPtr native_s, int start, int count, int after)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.BeforeTextChanged (s, start, count, after);
    	}
    path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='beforeTextChanged' and count(parameter)=4 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='int']]"
    	[Register ("beforeTextChanged", "(Ljava/lang/CharSequence;III)V", "GetBeforeTextChanged_Ljava_lang_CharSequence_IIIHandler")]
    	public virtual unsafe void BeforeTextChanged (global::Java.Lang.ICharSequence s, int start, int count, int after)
    	{
    		const string __id = "beforeTextChanged.(Ljava/lang/CharSequence;III)V";
    		IntPtr native_s = CharSequence.ToLocalJniHandle (s);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [4];
    			__args [0] = new JniArgumentValue (native_s);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (count);
    			__args [3] = new JniArgumentValue (after);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_s);
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	public void BeforeTextChanged (string s, int start, int count, int after)
    	{
    		var jls_s = s == null ? null : new global::Java.Lang.String (s);
    		BeforeTextChanged (jls_s, start, count, after);
    		jls_s?.Dispose ();
    	}
    
    	static Delegate cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II;
    
    static Delegate GetFilter_Ljava_lang_CharSequence_IILandroid_text_Spanned_IIHandler ()
    {
    if (cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II == null)
    cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIILII_L) n_Filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II);
    return cb_filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II;
    }
    
    	static IntPtr n_Filter_Ljava_lang_CharSequence_IILandroid_text_Spanned_II (IntPtr jnienv, IntPtr native__this, IntPtr native_source, int start, int end, IntPtr native_dest, int dstart, int dend)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var source = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_source, JniHandleOwnership.DoNotTransfer);
    		var dest = (global::Android.Text.ISpanned)global::Java.Lang.Object.GetObject<global::Android.Text.ISpanned> (native_dest, JniHandleOwnership.DoNotTransfer);
    		IntPtr __ret = CharSequence.ToLocalJniHandle (__this.FilterFormatted (source, start, end, dest, dstart, dend));
    		return __ret;
    	}
    path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='filter' and count(parameter)=6 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='android.text.Spanned'] and parameter[5][@type='int'] and parameter[6][@type='int']]"
    	[Register ("filter", "(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;", "GetFilter_Ljava_lang_CharSequence_IILandroid_text_Spanned_IIHandler")]
    	public virtual unsafe global::Java.Lang.ICharSequence FilterFormatted (global::Java.Lang.ICharSequence source, int start, int end, global::Android.Text.ISpanned dest, int dstart, int dend)
    	{
    		const string __id = "filter.(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;";
    		IntPtr native_source = CharSequence.ToLocalJniHandle (source);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [6];
    			__args [0] = new JniArgumentValue (native_source);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (end);
    			__args [3] = new JniArgumentValue ((dest == null) ? IntPtr.Zero : ((global::Java.Lang.Object) dest).Handle);
    			__args [4] = new JniArgumentValue (dstart);
    			__args [5] = new JniArgumentValue (dend);
    			var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
    			return global::Java.Lang.Object.GetObject<Java.Lang.ICharSequence> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_source);
    			global::System.GC.KeepAlive (source);
    			global::System.GC.KeepAlive (dest);
    		}
    	}
    
    	public string Filter (string source, int start, int end, global::Android.Text.ISpanned dest, int dstart, int dend)
    	{
    		var jls_source = source == null ? null : new global::Java.Lang.String (source);
    		global::Java.Lang.ICharSequence __result = FilterFormatted (jls_source, start, end, dest, dstart, dend);
    		var __rsval = __result?.ToString ();
    		jls_source?.Dispose ();
    		return __rsval;
    	}
    
    	static Delegate cb_isValid;
    static Delegate GetIsValidHandler ()
    {
    if (cb_isValid == null)
    cb_isValid = JNINativeWrapper.CreateDelegate ((_JniMarshal_PP_L) n_IsValid);
    return cb_isValid;
    }
    
    	static IntPtr n_IsValid (IntPtr jnienv, IntPtr native__this)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		return JNIEnv.ToLocalJniHandle (__this.IsValid ());
    	}
    
    	// Metadata.xml XPath method reference: path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='isValid' and count(parameter)=0]"
    	[Register ("isValid", "()Ljava/lang/Boolean;", "GetIsValidHandler")]
    	public virtual unsafe global::Java.Lang.Boolean IsValid ()
    	{
    		const string __id = "isValid.()Ljava/lang/Boolean;";
    		try {
    			var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
    			return global::Java.Lang.Object.GetObject<global::Java.Lang.Boolean> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
    		} finally {
    		}
    	}
    
    	static Delegate cb_onTextChanged_Ljava_lang_CharSequence_III;
    static Delegate GetOnTextChanged_Ljava_lang_CharSequence_IIIHandler ()
    {
    if (cb_onTextChanged_Ljava_lang_CharSequence_III == null)
    cb_onTextChanged_Ljava_lang_CharSequence_III = JNINativeWrapper.CreateDelegate ((_JniMarshal_PPLIII_V) n_OnTextChanged_Ljava_lang_CharSequence_III);
    return cb_onTextChanged_Ljava_lang_CharSequence_III;
    }
    
    	static void n_OnTextChanged_Ljava_lang_CharSequence_III (IntPtr jnienv, IntPtr native__this, IntPtr native_s, int start, int before, int count)
    	{
    		var __this = global::Java.Lang.Object.GetObject<global::Com.Paymentus.Sdk.Utils.Validationutils.NonEmptyValidator> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
    		var s = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_s, JniHandleOwnership.DoNotTransfer);
    		__this.OnTextChanged (s, start, before, count);
    	}
    path="/api/package[@name='com.paymentus.sdk.utils.validationutils']/class[@name='NonEmptyValidator']/method[@name='onTextChanged' and count(parameter)=4 and parameter[1][@type='java.lang.CharSequence'] and parameter[2][@type='int'] and parameter[3][@type='int'] and parameter[4][@type='int']]"
    	[Register ("onTextChanged", "(Ljava/lang/CharSequence;III)V", "GetOnTextChanged_Ljava_lang_CharSequence_IIIHandler")]
    	public virtual unsafe void OnTextChanged (global::Java.Lang.ICharSequence s, int start, int before, int count)
    	{
    		const string __id = "onTextChanged.(Ljava/lang/CharSequence;III)V";
    		IntPtr native_s = CharSequence.ToLocalJniHandle (s);
    		try {
    			JniArgumentValue* __args = stackalloc JniArgumentValue [4];
    			__args [0] = new JniArgumentValue (native_s);
    			__args [1] = new JniArgumentValue (start);
    			__args [2] = new JniArgumentValue (before);
    			__args [3] = new JniArgumentValue (count);
    			_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
    		} finally {
    			JNIEnv.DeleteLocalRef (native_s);
    			global::System.GC.KeepAlive (s);
    		}
    	}
    
    	public void OnTextChanged (string s, int start, int before, int count)
    	{
    		var jls_s = s == null ? null : new global::Java.Lang.String (s);
    		OnTextChanged (jls_s, start, before, count);
    		jls_s?.Dispose ();
    	}
    
    }
    }
    

    Can anyone suggest any permanent changes that we can do in SDK side to avoid changes every time in Xamarin C# file

  4. jpobst commented on Oct 13, 2022

    @jpobst
    Contributor

    Without knowing what the error(s) you are seeing are it's hard to give any specific advice. The general solution though is you need to use the "metadata" process to influence what the bindings generator process emits:

    https://github.com/xamarin/java.interop/wiki/Troubleshooting-Android-Bindings-Issues

    This documentation explains how to do that in general, as well as provides guides for how to fix specific issues based on the error code you are getting.

  5. ghost locked as resolved and limited conversation to collaborators on Nov 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Area: BindingsIssues in Java Library Binding projects.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions