The short answer is that this is also not a bug. Java arrays are typed, JS arrays are not. So none of the examples you have will fully work.
E.g. If you do array instanceof Date[] on an array built in JS filled with Dates it will fail. A native array is best modeled as SomeNativeJsType[] where there are not expectations on the contents of the array from the Java perspective. We would have loved to have a more seamless array JsInterop. On Mon, Jun 26, 2017 at 1:31 AM, Vassilis Virvilis <[email protected]> wrote: > Originally posted in gwt-users. > > The question here is the same with the previous one. > > Is this considered a bug? Should I report it as an issue? and if so where? > > Thanks. > > > ---------- Forwarded message ---------- > From: Vassilis Virvilis <[email protected]> > Date: Fri, Feb 24, 2017 at 2:44 PM > Subject: jsinterop woes: Part 2: return Double[] > To: [email protected] > > > 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 > > > > -- > Vassilis Virvilis > > -- > You received this message because you are subscribed to the Google Groups > "GWT Contributors" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/google-web-toolkit-contributors/CAKbOjEzUf3LAK90Gnq%2B8B5Yzq7akyZPC% > 3DJ9ch1DFieqoOCJJVA%40mail.gmail.com > <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAKbOjEzUf3LAK90Gnq%2B8B5Yzq7akyZPC%3DJ9ch1DFieqoOCJJVA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "GWT Contributors" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAC7T7gnF1A8-xQs%3DORiyp1Ofmp%3D%2B4Hj9JJ%2B2KGsfbT%2B_1JVeTA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
