/
GWT JSNI inheritance antifeature

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()();

}-*/;