java.interop
java.interop copied to clipboard
ACW implements java interface although it is not public for the class that has no implements node in api.xml
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<T>" jni-type="Landroidx/recyclerview/widget/AsyncDifferConfig<TT;>;">
</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<T>" jni-type="Landroidx/recyclerview/widget/DiffUtil$ItemCallback<TT;>;">
</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<T>" jni-return="Landroidx/paging/PagedList<TT;>;" 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<T>" jni-type="Landroidx/paging/PagedList<TT;>;">
</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
.
@moljac: Could you please attach the entire api.xml
file? If PagedListListener
isn't present, it doesn't make immediate sense that it would be emitted at all.