Сгенерированные привязки удаляют родовые - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь связать абстрактный класс, который использует дженерики:

public abstract class ResponseCallback<T>
{
  public ResponseCallback() {}

  public abstract void onResponse(Response<T> paramResponse);

  public abstract void onError(int paramInt, String paramString);
}

Однако сгенерированный файл C # не имеет этого

 // Metadata.xml XPath class reference: path="/api/package[@name='com.test.test.module.api']/class[@name='ResponseCallback']"
[global::Android.Runtime.Register ("com/test/test/module/api/ResponseCallback", DoNotGenerateAcw=true)]
[global::Java.Interop.JavaTypeParameters (new string [] {"T"})]
public abstract partial class ResponseCallback : global::Java.Lang.Object {

    internal    new     static  readonly    JniPeerMembers  _members    = new XAPeerMembers ("com/test/test/module/api/ResponseCallback", typeof (ResponseCallback));
    internal static new IntPtr class_ref {
        get {
            return _members.JniPeerType.PeerReference.Handle;
        }
    }

    public override global::Java.Interop.JniPeerMembers JniPeerMembers {
        get { return _members; }
    }

    protected override IntPtr ThresholdClass {
        get { return _members.JniPeerType.PeerReference.Handle; }
    }

    protected override global::System.Type ThresholdType {
        get { return _members.ManagedPeerType; }
    }

    protected ResponseCallback (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {}

    // Metadata.xml XPath constructor reference: path="/api/package[@name='com.test.test.module.api']/class[@name='ResponseCallback']/constructor[@name='ResponseCallback' and count(parameter)=0]"
    [Register (".ctor", "()V", "")]
    public unsafe ResponseCallback ()
        : 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_onError_ILjava_lang_String_;

    static Delegate GetOnError_ILjava_lang_String_Handler ()
    {
        if (cb_onError_ILjava_lang_String_ == null)
            cb_onError_ILjava_lang_String_ = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, int, IntPtr>) n_OnError_ILjava_lang_String_);
        return cb_onError_ILjava_lang_String_;
    }

    static void n_OnError_ILjava_lang_String_ (IntPtr jnienv, IntPtr native__this, int p0, IntPtr native_p1)
    {
        global::Com.Test.Test.Module.Api.ResponseCallback __this = global::Java.Lang.Object.GetObject<global::Com.Test.Test.Module.Api.ResponseCallback> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
        string p1 = JNIEnv.GetString (native_p1, JniHandleOwnership.DoNotTransfer);
        __this.OnError (p0, p1);
    }


    // Metadata.xml XPath method reference: path="/api/package[@name='com.test.test.module.api']/class[@name='ResponseCallback']/method[@name='onError' and count(parameter)=2 and parameter[1][@type='int'] and parameter[2][@type='java.lang.String']]"
    [Register ("onError", "(ILjava/lang/String;)V", "GetOnError_ILjava_lang_String_Handler")]
    public abstract void OnError (int p0, string p1);

}

[global::Android.Runtime.Register ("com/test/test/module/api/ResponseCallback", DoNotGenerateAcw=true)]
internal partial class ResponseCallbackInvoker : ResponseCallback {

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

    internal    new     static  readonly    JniPeerMembers  _members    = new JniPeerMembers ("com/test/test/module/api/ResponseCallback", typeof (ResponseCallbackInvoker));

    public override global::Java.Interop.JniPeerMembers JniPeerMembers {
        get { return _members; }
    }

    protected override global::System.Type ThresholdType {
        get { return _members.ManagedPeerType; }
    }

    // Metadata.xml XPath method reference: path="/api/package[@name='com.test.test.module.api']/class[@name='ResponseCallback']/method[@name='onError' and count(parameter)=2 and parameter[1][@type='int'] and parameter[2][@type='java.lang.String']]"
    [Register ("onError", "(ILjava/lang/String;)V", "GetOnError_ILjava_lang_String_Handler")]
    public override unsafe void OnError (int p0, string p1)
    {
        const string __id = "onError.(ILjava/lang/String;)V";
        IntPtr native_p1 = JNIEnv.NewString (p1);
        try {
            JniArgumentValue* __args = stackalloc JniArgumentValue [2];
            __args [0] = new JniArgumentValue (p0);
            __args [1] = new JniArgumentValue (native_p1);
            _members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
        } finally {
            JNIEnv.DeleteLocalRef (native_p1);
        }
    }

}

Как видите, яв моем сгенерированном коде отсутствует узел public abstract void onResponse(Response<T> paramResponse);.Что я могу сделать, чтобы получить это и дженерики, включенные в код C #?Я гуглил всю ночь и ничего не могу найти.

В некоторых статьях предлагается добавить в файл дополнений в проекте привязки, но я не могу понять, как заставить его работать, и нет документации по этому вопросу.Раздел «Добавление» процесса привязки.

ПРИМЕЧАНИЕ. Я изменил пути в комментариях к метаданным, поскольку они являются собственностью.

...