Defining android.os.RemoteCallbackList$Builder$InterfaceDiedCallback as listener class, JNetReflector is not able to reflect it in the right way.
- Java:
- the output generated from JNetReflector is the following:
package org.mases.netdroid.generated.android.os;
public final class RemoteCallbackList_Builder_InterfaceDiedCallback implements org.mases.jcobridge.IJCListener, android.os.RemoteCallbackList.Builder.InterfaceDiedCallback {
final org.mases.jcobridge.JCListener _internalListener;
public RemoteCallbackList_Builder_InterfaceDiedCallback(String key) throws org.mases.jcobridge.JCNativeException {
super();
_internalListener = new org.mases.jcobridge.JCListener(key);
}
public synchronized void release() {
_internalListener.release();
}
public synchronized void raiseEvent(String eventName) {
_internalListener.raiseEvent(eventName);
}
public synchronized void raiseEvent(String eventName, Object e) {
_internalListener.raiseEvent(eventName, e);
}
public synchronized void raiseEvent(String eventName, Object e, Object... objects) {
_internalListener.raiseEvent(eventName, e, objects);
}
public Object getEventData() {
return _internalListener.getEventData();
}
public boolean hasExtraData() {
return _internalListener.hasExtraData();
}
public int extraDataLength() {
return _internalListener.extraDataLength();
}
public Object[] extraData() {
return _internalListener.extraData();
}
public Object getReturnData() {
return _internalListener.getReturnData();
}
public void setReturnData(Object retData) {
_internalListener.setReturnData(retData);
}
//@Override
public void onInterfaceDied(android.os.RemoteCallbackList arg0, java.lang.Object arg1, java.lang.Object arg2) {
org.mases.jnet.developed.JNetEventResult eventDataExchange = new org.mases.jnet.developed.JNetEventResult();
raiseEvent("onInterfaceDied", eventDataExchange, arg0, arg1, arg2); if (!eventDataExchange.getHasOverride()) throw new UnsupportedOperationException("The method shall be implemented in .NET side since does not have a default implementation within the JVM");
}
}
- however the compiler reports:
Error: /home/runner/work/netdroid/netdroid/src/jvm/netdroid/src/main/java/org/mases/netdroid/generated/android/os/RemoteCallbackList_Builder_InterfaceDiedCallback.java:[25,14] org.mases.netdroid.generated.android.os.RemoteCallbackList_Builder_InterfaceDiedCallback is not abstract and does not override abstract method onInterfaceDied(android.os.RemoteCallbackList,android.os.IInterface,java.lang.Object) in android.os.RemoteCallbackList.Builder.InterfaceDiedCallback
- manually updating the class, the implementation which avoid compilation errors is the following:
package org.mases.netdroid.generated.android.os;
public final class RemoteCallbackList_Builder_InterfaceDiedCallback<E extends android.os.IInterface> implements org.mases.jcobridge.IJCListener, android.os.RemoteCallbackList.Builder.InterfaceDiedCallback<E extends android.os.IInterface> {
final org.mases.jcobridge.JCListener _internalListener;
public RemoteCallbackList_Builder_InterfaceDiedCallback(String key) throws org.mases.jcobridge.JCNativeException {
super();
_internalListener = new org.mases.jcobridge.JCListener(key);
}
public synchronized void release() {
_internalListener.release();
}
public synchronized void raiseEvent(String eventName) {
_internalListener.raiseEvent(eventName);
}
public synchronized void raiseEvent(String eventName, Object e) {
_internalListener.raiseEvent(eventName, e);
}
public synchronized void raiseEvent(String eventName, Object e, Object... objects) {
_internalListener.raiseEvent(eventName, e, objects);
}
public Object getEventData() {
return _internalListener.getEventData();
}
public boolean hasExtraData() {
return _internalListener.hasExtraData();
}
public int extraDataLength() {
return _internalListener.extraDataLength();
}
public Object[] extraData() {
return _internalListener.extraData();
}
public Object getReturnData() {
return _internalListener.getReturnData();
}
public void setReturnData(Object retData) {
_internalListener.setReturnData(retData);
}
@Override
public void onInterfaceDied(android.os.RemoteCallbackList<E> arg0, E arg1, java.lang.Object arg2) {
org.mases.jnet.developed.JNetEventResult eventDataExchange = new org.mases.jnet.developed.JNetEventResult();
raiseEvent("onInterfaceDied", eventDataExchange, arg0, arg1, arg2); if (!eventDataExchange.getHasOverride()) throw new UnsupportedOperationException("The method shall be implemented in .NET side since does not have a default implementation within the JVM");
}
}
- .NET
- the implementation of the listener seems to conform to the expectation
- however the following method, or other one, does not define the parameter in the right way:
/// <summary>
/// <see href="https://developer.android.com/reference/android/os/RemoteCallbackList.Builder.InterfaceDiedCallback.html#onInterfaceDied(android.os.RemoteCallbackList,android.os.IInterface,java.lang.Object)"/>
/// </summary>
/// <param name="arg0"><see cref="Android.Os.RemoteCallbackList"/></param>
/// <param name="arg1"><typeparamref name="E"/></param>
/// <param name="arg2"><see cref="object"/></param>
public virtual void OnInterfaceDied(Android.Os.RemoteCallbackList<E> arg0, E arg1, object arg2)
{
hasOverrideOnInterfaceDied = false;
}
- the error is:
The type 'E' cannot be used as type parameter 'E' in the generic type or method 'RemoteCallbackList<E>'. There is no boxing conversion or type parameter conversion from 'E' to 'Android.Os.IIInterface'.
The class generation of JNetReflector shall be reviewed when this conditions are encountered, an issue will be opened on JNet.
Originally posted by @masesdevelopers in masesgroup/netdroid#181 (comment)
Defining
android.os.RemoteCallbackList$Builder$InterfaceDiedCallbackas listener class, JNetReflector is not able to reflect it in the right way.Error: /home/runner/work/netdroid/netdroid/src/jvm/netdroid/src/main/java/org/mases/netdroid/generated/android/os/RemoteCallbackList_Builder_InterfaceDiedCallback.java:[25,14] org.mases.netdroid.generated.android.os.RemoteCallbackList_Builder_InterfaceDiedCallback is not abstract and does not override abstract method onInterfaceDied(android.os.RemoteCallbackList,android.os.IInterface,java.lang.Object) in android.os.RemoteCallbackList.Builder.InterfaceDiedCallbackThe type 'E' cannot be used as type parameter 'E' in the generic type or method 'RemoteCallbackList<E>'. There is no boxing conversion or type parameter conversion from 'E' to 'Android.Os.IIInterface'.The class generation of JNetReflector shall be reviewed when this conditions are encountered, an issue will be opened on JNet.
Originally posted by @masesdevelopers in masesgroup/netdroid#181 (comment)