GWT JSNI inheritance antifeature
References to java methods from JSNI must always refer to the class signatures of the defining base class, not the inheriting child class. Compile-time- OR Runtime-Exceptions can occur.
Example: Take the following abstract class...
package org.clazzes.example; abstract class Parent { public void parentMethod() { //Do something... } }
which is extended as follows (factory method added for clarity):
package org.clazzes.example; class Child extends Parent { public static Child getInstance() { return new Child(); } }
To use parentMethod() from an instance of Child, you must use the following:
public native final void callParentMethodFromJSNI() /*-{ var child = @org.clazzes.example.Child::newInstance()(); //access to parentMethod() only works like this: child.@org.clazzes.example.Parent::parentMethod()(); }-*/;