Skip to content

ACW implements java interface although it is not public for the class that has no implements node in api.xml #591

Open
@moljac

Description

@moljac

Another one from AndroidX

ACW error during samples builds:

obj/Debug/android/src/mono/androidx/paging/AsyncPagedListDiffer_PagedListListenerImplementor.java(8,39): javac error JAVAC0000:  error: PagedListListener is not public in AsyncPagedListDiffer; cannot be accessed from outside package [/Users/Shared/Projects/d/X/AndroidX_master/samples/BuildAll/BuildAll/BuildAll.csproj]
obj/Debug/android/src/mono/androidx/paging/AsyncPagedListDiffer_PagedListListenerImplementor.java(8,39): javac error JAVAC0000: 		androidx.paging.AsyncPagedListDiffer.PagedListListener [/Users/Shared/Projects/d/X/AndroidX_master/samples/BuildAll/BuildAll/BuildAll.csproj]
obj/Debug/android/src/mono/androidx/paging/AsyncPagedListDiffer_PagedListListenerImplementor.java(8,39): javac error JAVAC0000:  [/Users/Shared/Projects/d/X/AndroidX_master/samples/BuildAll/BuildAll/BuildAll.csproj]

api.xml for the AsyncPagedListDiffer class:

    <class abstract="false" deprecated="not deprecated" extends="java.lang.Object" extends-generic-aware="java.lang.Object" jni-extends="Ljava/lang/Object;" final="false" name="AsyncPagedListDiffer" static="false" visibility="public" jni-signature="Landroidx/paging/AsyncPagedListDiffer;">
      <typeParameters>
        <typeParameter name="T" classBound="java.lang.Object" jni-classBound="Ljava/lang/Object;"></typeParameter>
      </typeParameters>
      <constructor deprecated="not deprecated" final="false" name="AsyncPagedListDiffer" jni-signature="(Landroidx/recyclerview/widget/ListUpdateCallback;Landroidx/recyclerview/widget/AsyncDifferConfig;)V" bridge="false" static="false" type="androidx.paging.AsyncPagedListDiffer" synthetic="false" visibility="public">
        <parameter name="listUpdateCallback" type="androidx.recyclerview.widget.ListUpdateCallback" jni-type="Landroidx/recyclerview/widget/ListUpdateCallback;">
        </parameter>
        <parameter name="config" type="androidx.recyclerview.widget.AsyncDifferConfig&lt;T&gt;" jni-type="Landroidx/recyclerview/widget/AsyncDifferConfig&lt;TT;&gt;;">
        </parameter>
      </constructor>
      <constructor deprecated="not deprecated" final="false" name="AsyncPagedListDiffer" jni-signature="(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/DiffUtil$ItemCallback;)V" bridge="false" static="false" type="androidx.paging.AsyncPagedListDiffer" synthetic="false" visibility="public">
        <parameter name="adapter" type="androidx.recyclerview.widget.RecyclerView.Adapter" jni-type="Landroidx/recyclerview/widget/RecyclerView$Adapter;">
        </parameter>
        <parameter name="diffCallback" type="androidx.recyclerview.widget.DiffUtil.ItemCallback&lt;T&gt;" jni-type="Landroidx/recyclerview/widget/DiffUtil$ItemCallback&lt;TT;&gt;;">
        </parameter>
      </constructor>
      <method abstract="false" deprecated="not deprecated" final="false" name="getCurrentList" jni-signature="()Landroidx/paging/PagedList;" bridge="false" native="false" return="androidx.paging.PagedList&lt;T&gt;" jni-return="Landroidx/paging/PagedList&lt;TT;&gt;;" static="false" synchronized="false" synthetic="false" visibility="public">
      </method>
      <method abstract="false" deprecated="not deprecated" final="false" name="getItem" jni-signature="(I)Ljava/lang/Object;" bridge="false" native="false" return="T" jni-return="TT;" static="false" synchronized="false" synthetic="false" visibility="public">
        <parameter name="index" type="int" jni-type="I">
        </parameter>
      </method>
      <method abstract="false" deprecated="not deprecated" final="false" name="getItemCount" jni-signature="()I" bridge="false" native="false" return="int" jni-return="I" static="false" synchronized="false" synthetic="false" visibility="public">
      </method>
      <method abstract="false" deprecated="not deprecated" final="false" name="submitList" jni-signature="(Landroidx/paging/PagedList;)V" bridge="false" native="false" return="void" jni-return="V" static="false" synchronized="false" synthetic="false" visibility="public">
        <parameter name="pagedList" type="androidx.paging.PagedList&lt;T&gt;" jni-type="Landroidx/paging/PagedList&lt;TT;&gt;;">
        </parameter>
      </method>
    </class>

Attempt to make class non-generic and interface protected

<metadata>
    <remove-node
        path="/api/package[@name='androidx.paging']/class[@name='AsyncPagedListDiffer']/typeParameters"
        />        
    <attr
 path="/api/package[@name='androidx.paging']/interface[@name='AsyncPagedListDiffer.PagedListListener']"
        name="visibility"
        > 
        protected
    </attr>
</metadata>

Generated managed C# code:

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

		// Metadata.xml XPath interface reference: path="/api/package[@name='androidx.paging']/interface[@name='AsyncPagedListDiffer.PagedListListener']"
		[Register ("androidx/paging/AsyncPagedListDiffer$PagedListListener", "", "AndroidX.Paging.AsyncPagedListDiffer/IPagedListListenerInvoker")]
		protected internal partial interface IPagedListListener : IJavaObject, IJavaPeerable {

               // removed code

		}

		[global::Android.Runtime.Register ("androidx/paging/AsyncPagedListDiffer$PagedListListener", DoNotGenerateAcw=true)]
		internal partial class IPagedListListenerInvoker : global::Java.Lang.Object, IPagedListListener {
               }

So interface is protected internal and added. Why?

generated ACW java adds interface:

package mono.androidx.paging;


public class AsyncPagedListDiffer_PagedListListenerImplementor
	extends java.lang.Object
	implements
		mono.android.IGCUserPeer,
		androidx.paging.AsyncPagedListDiffer.PagedListListener

Note PagedListListener which is not in api.xml (no implements for give class AsyncPagedListDiffer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    callable-wrappersIssues with Java Callable Wrappers

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions