Friday, February 24, 2017

jsinterop woes: Part 1: instanceof function in generics casting

Hi,

again I don't know if this is a bug but it hurts my style

D3 defines d3.scale.ordinal as both a function and an object. $wnd.d3.scale.ordinal returns function() in the browser's console though


   @JsType(isNative = true, name = "ordinal")
      public static class Ordinal {
           /** @todo TODO: this crashes. Why? */
           public native <I, O> O range(I[] values);       // this doesn't work
           //public native <I> Ordinal range(I[] values); // this works
      }

I want the generic type because then I can put it in a base class and share some code.

I am using it like this
D3.Scale.Ordinal color = D3.Scale.ordinal().range(new String[] {"#98abc5", "#8a89a6"});

Here is the javascript exception:

Error: java.lang.ClassCastException
    at java_lang_ClassCastException_ClassCastException__V.java_lang_Throwable_createError__Ljava_lang_String_2Ljava_lang_Object_2 [as package_private$java_lang$createError__Ljava_lang_String_2Ljava_lang_Object_2] (dashboard-0.js:7245)
    at java_lang_ClassCastException_ClassCastException__V.java_lang_Throwable_initializeBackingError__V [as private$java_lang_Throwable$initializeBackingError__V] (dashboard-0.js:7300)
    at java_lang_ClassCastException_ClassCastException__V.java_lang_Throwable_Throwable__V (dashboard-0.js:7133)
    at java_lang_ClassCastException_ClassCastException__V.java_lang_Exception_Exception__V (dashboard-0.js:7381)
    at java_lang_ClassCastException_ClassCastException__V.java_lang_RuntimeException_RuntimeException__V (dashboard-0.js:29724)
    at java_lang_ClassCastException_ClassCastException__V (dashboard-0.js:57274)
    at javaemul_internal_InternalPreconditions_checkCriticalType__ZV (dashboard-0.js:72135)
    at javaemul_internal_InternalPreconditions_checkType__ZV (dashboard-0.js:72342)
    at com_google_gwt_lang_Cast_castToNative__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Ljava_lang_Object_2 (dashboard-0.js:707)   

In
function com_google_gwt_lang_Cast_castToNative__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Ljava_lang_Object_2(src_0, jsType){
  com_google_gwt_lang_Cast_$clinit__V();
  javaemul_internal_InternalPreconditions_checkType__ZV(com_google_gwt_lang_Cast_jsEquals__Ljava_lang_Object_2Ljava_lang_Object_2Z(src_0, null) || com_google_gwt_lang_Cast_jsinstanceOf__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Z(src_0, jsType));
  return src_0;
}

Arguments:
  • src_0:
    • passed:
    • evaluated: function scale(x)
  • jsType:
    • passed: $wnd.scale.ordinal
    • evaluated: function anonymous()
The reason it fails is that
function com_google_gwt_lang_Cast_jsinstanceOf__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Z(obj, jsType){
  com_google_gwt_lang_Cast_$clinit__V();
  return obj && (jsType && obj instanceof jsType);
}

obj is src_0 != null and jsType = function anonymous() != null but (obj instanceof jsType) === false

Any idea about that?

--
Vassilis Virvilis

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment