Friday, February 24, 2017

jsinterop woes: Part 2: return Double[]

Hi,

I am not sure if it is a bug but it kills my beautiful jsinterop mappings.

Let's say that I have a native js function (d3.extent) that returns an array of something. It may be dates it may be doubles..

This is mapped nicely with

    public static native <T, V> V[] extent(T[] data,
            AccessorFunction<T, V> accessor);

Where AccessorFunction is

    @JsFunction
    public static interface AccessorFunction<T, V> {
        public V get(T d);
    }

The above scheme works for Date and other objects but it fails with Double. If I specify another variant of d3.extent that returns double[] it works

Here is the javascript exception

Uncaught 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:29760)
    at java_lang_ClassCastException_ClassCastException__V (dashboard-0.js:57310)
    at javaemul_internal_InternalPreconditions_checkCriticalType__ZV (dashboard-0.js:72171)
    at javaemul_internal_InternalPreconditions_checkType__ZV (dashboard-0.js:72378)
    at com_google_gwt_lang_Cast_castTo__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Ljava_lang_Object_2 (dashboard-0.js:647)

It goes here
function com_google_gwt_lang_Cast_castTo__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Ljava_lang_Object_2(src_0, dstId){
  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_canCast__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Z(src_0, dstId));
  return src_0;
}

Arguments:
  • src_0:
    • evaluated: js array of numbers as it should be
  • dstId:
    • evaluated: 2396
and then it goes to

function com_google_gwt_lang_Cast_canCast__Ljava_lang_Object_2Lcom_google_gwt_core_client_JavaScriptObject_2Z(src_0, dstId){
  com_google_gwt_lang_Cast_$clinit__V();
  if (com_google_gwt_lang_Cast_instanceOfString__Ljava_lang_Object_2Z(src_0)) {
    return !!com_google_gwt_lang_Cast_stringCastMap[dstId];
  }
   else if (src_0.java_lang_Object_castableTypeMap) {
    return !!src_0.java_lang_Object_castableTypeMap[dstId];
  }
   else if (com_google_gwt_lang_Cast_instanceOfDouble__Ljava_lang_Object_2Z(src_0)) {
    return !!com_google_gwt_lang_Cast_doubleCastMap[dstId];
  }
   else if (com_google_gwt_lang_Cast_instanceOfBoolean__Ljava_lang_Object_2Z(src_0)) {
    return !!com_google_gwt_lang_Cast_booleanCastMap[dstId];
  }
  return false;
}

where it fails.

Would it be possible to handle transparently also Double[] (and possibly String[])? as double[]?

   Thank you for reading that far...

Vassilis







--
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