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 <vasv...@gmail.com>
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 <vasv...@gmail.com>
> Date: Fri, Feb 24, 2017 at 2:44 PM
> Subject: jsinterop woes: Part 2: return Double[]
> To: google-web-tool...@googlegroups.com
>
>
> 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 google-web-toolkit-contributors+unsubscr...@googlegroups.com.
> 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 google-web-toolkit-contributors+unsubscr...@googlegroups.com.
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.

Reply via email to