Skip to content

bgen: can't convert System.Collections.Generic.IList<string> <-> System.Collections.IList? #1147

Open
@LeadAssimilator

Description

@LeadAssimilator

VS 17.7.4 / X 17.7.0.216 / XA 13.2.1.2

While trying to generate legacy xamarin android bindings targeting android 13 with class-parse and XAJavaInterop1 for two different aars, Core and Tracker CS1503 and CS0266 are occurring in the generated IJobApiInvoker class for Tracker which depends on Core - Core builds ok.

error CS1503: Argument 1: cannot convert from 'System.Collections.Generic.IList<string>' to 'System.Collections.IList?'
error CS0266: Cannot implicitly convert type 'System.Collections.IList' to 'System.Collections.Generic.IList<string>'. An explicit conversion exists (are you missing a cast?)

Core api.xml snippet:

<interface abstract="true" deprecated="not deprecated" final="false" name="JobApi" static="false" visibility="public" jni-signature="Lcom/kochava/core/job/job/internal/JobApi;">
  <method abstract="true" deprecated="not deprecated" final="false" name="getDependencies" jni-signature="()Ljava/util/List;" bridge="false" native="false" return="java.util.List&lt;java.lang.String&gt;" jni-return="Ljava/util/List&lt;Ljava/lang/String;&gt;;" static="false" synchronized="false" synthetic="false" visibility="public" return-not-null="true" />
</interface>

Tracker api.xml snippet:

<interface abstract="true" deprecated="not deprecated" final="false" name="JobApi" static="false" visibility="public" jni-signature="Lcom/kochava/tracker/job/internal/JobApi;">
  <implements name="com.kochava.core.job.job.internal.JobApi" name-generic-aware="com.kochava.core.job.job.internal.JobApi&lt;com.kochava.tracker.job.internal.JobParams&gt;" jni-type="Lcom/kochava/core/job/job/internal/JobApi&lt;Lcom/kochava/tracker/job/internal/JobParams;&gt;;" />
</interface>

Core bgen'd code snippet that compiles:

// Metadata.xml XPath interface reference: path="/api/package[@name='com.kochava.core.job.job.internal']/interface[@name='JobApi']"
[Register ("com/kochava/core/job/job/internal/JobApi", "", "Com.Kochava.Core.Job.Job.Internal.IJobApiInvoker")]
[global::Java.Interop.JavaTypeParameters (new string [] {"JobHostParametersType"})]
public partial interface IJobApi : IJavaObject, IJavaPeerable {
	global::System.Collections.Generic.IList<string> Dependencies {
		// Metadata.xml XPath method reference: path="/api/package[@name='com.kochava.core.job.job.internal']/interface[@name='JobApi']/method[@name='getDependencies' and count(parameter)=0]"
		[Register ("getDependencies", "()Ljava/util/List;", "GetGetDependenciesHandler:Com.Kochava.Core.Job.Job.Internal.IJobApiInvoker, KochavaCoreBindings.Droid")]
		get; 
	}
}

[global::Android.Runtime.Register ("com/kochava/core/job/job/internal/JobApi", DoNotGenerateAcw=true)]
internal partial class IJobApiInvoker : global::Java.Lang.Object, IJobApi {

	static IntPtr n_GetDependencies (IntPtr jnienv, IntPtr native__this)
	{
		var __this = global::Java.Lang.Object.GetObject<global::Com.Kochava.Core.Job.Job.Internal.IJobApi> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
		return global::Android.Runtime.JavaList<string>.ToLocalJniHandle (__this.Dependencies);
	}
#pragma warning restore 0169

	IntPtr id_getDependencies;
	public unsafe global::System.Collections.Generic.IList<string> Dependencies {
		get {
			if (id_getDependencies == IntPtr.Zero)
				id_getDependencies = JNIEnv.GetMethodID (class_ref, "getDependencies", "()Ljava/util/List;");
			return global::Android.Runtime.JavaList<string>.FromJniHandle (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_getDependencies), JniHandleOwnership.TransferLocalRef);
		}
	}
}

Tracker bgen'd code snippet that fails compile:

// Metadata.xml XPath interface reference: path="/api/package[@name='com.kochava.tracker.job.internal']/interface[@name='JobApi']"
[Register ("com/kochava/tracker/job/internal/JobApi", "", "Com.Kochava.Tracker.Job.Internal.IJobApiInvoker")]
public partial interface IJobApi : global::Com.Kochava.Core.Job.Job.Internal.IJobApi {
}

[global::Android.Runtime.Register ("com/kochava/tracker/job/internal/JobApi", DoNotGenerateAcw=true)]
internal partial class IJobApiInvoker : global::Java.Lang.Object, IJobApi {

	static IntPtr n_GetDependencies (IntPtr jnienv, IntPtr native__this)
	{
		var __this = global::Java.Lang.Object.GetObject<global::Com.Kochava.Tracker.Job.Internal.IJobApi> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);

//error CS1503: Argument 1: cannot convert from 'System.Collections.Generic.IList<string>' to 'System.Collections.IList?'
		return global::Android.Runtime.JavaList.ToLocalJniHandle (__this.Dependencies);
	}
#pragma warning restore 0169

	IntPtr id_getDependencies;
	public unsafe global::System.Collections.Generic.IList<global::System.String> Dependencies {
		get {
			if (id_getDependencies == IntPtr.Zero)
				id_getDependencies = JNIEnv.GetMethodID (class_ref, "getDependencies", "()Ljava/util/List;");

//error CS0266: Cannot implicitly convert type 'System.Collections.IList' to 'System.Collections.Generic.IList<string>'. An explicit conversion exists (are you missing a cast?)
			return global::Android.Runtime.JavaList.FromJniHandle (JNIEnv.CallObjectMethod (((global::Java.Lang.Object) this).Handle, id_getDependencies), JniHandleOwnership.TransferLocalRef);
		}
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugComponent does not function as intendedgeneratorIssues binding a Java library (generator, class-parse, etc.)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions