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.

Reply via email to