If you have a JsInterop object that returns an []
you can do:

Object o = jsInteropObject.method(); //this in declared as "public Object 
method();" in your @JsType object
JsArray<JavaScriptObject>  array = JsInteropHelper.cast(o);


On 18/05/16 11:38, Vassilis Virvilis wrote:
> Hi
>
> @Pablo, I don't see how the example you gave relates to arrays and jsinterop
>
> @Thomas
> I am not exactly sure about but looks like that String[] is an array of char 
> arrays instead of native javascript Strings. For example this also works.
>
>
> config.buttons = new JsString[] {Util.getString("copyHtml5")};
>
> Where JsString and Util.getString are:
>
>     @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "String")
>     public static interface JsString {
>     }
>
>     public static native JsString getString(String string) /*-{
>         var l = string.length;
>         var s = "";
>         for (var i = 0; i < l; i++) {
>             s += string[i];
>         }
>         return s;
>     }-*/;
>
> Thanks in advance.
>
>
>
>
>
> On Thu, May 12, 2016 at 2:46 PM, Pablo Nussembaum <[email protected] 
> <mailto:[email protected]>> wrote:
>
>     Hi Vassilis,
>     I have been using JsInterop for managing IndexedDB stores and I have 
> created this [1] helper class for casting back and forth js to java. The main 
> issue is that in GWT there are two Object
>     hiearchies one from java and js, GWT makes are really job hiding that 
> detail, but with JsInterop the difference leaks ;-)
>
>     [1] 
> https://github.com/bauna/gwt-indexeddb/blob/devel/gwt-indexeddb-core/src/main/java/org/nuvola/indexeddb/client/JsInteropHelper.java
>
>     Let me know if want examples where I'm using this helper class.
>
>     Regards,
>     -- 
>     Pablo
>
>
>     On 12/05/16 07:43, Vassilis Virvilis wrote:
>>     Thanks for all the answers
>>
>>     The Collection#toArray does not work in my case because dataTables.net 
>> are a bit sensitive in the input. It stumbles upon java.lang stuff later on.
>>     Here
>>
>>             buttons = new String[] {"copyHtml5"};
>>
>>     while buttons2 is the correct one created with your previous suggestion.
>>
>>      1. buttons:
>>          1. 0:"copyHtml5"
>>          2. __elementTypeCategory$:6
>>          3. __elementTypeId$:2
>>          4. java_lang_Object__1_1_1clazz:java_lang_Class_Class__V
>>          5. java_lang_Object_castableTypeMap:Object
>>          6. 
>> java_lang_Object_typeMarker:com_google_gwt_lang_Runtime_typeMarkerFn__V()
>>          7. length:1
>>          8. __proto__:Array[0]
>>      2. buttons2:Array[1]
>>          1. 0:"copyHtml5"
>>          2. length:1
>>          3. __proto__:Array[0]
>>
>>     About Array vs []
>>     I am not js expert and looking for the difference I hit this 
>> http://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar
>>     Check this answer 
>> http://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar/1273936#1273936
>>
>>     So I though if that could work with GWT and I tried it.
>>
>>     Also thanks for the link I bookmarked it.
>>
>>
>>     On Thu, May 12, 2016 at 1:20 PM, Thomas Broyer <[email protected] 
>> <mailto:[email protected]>> wrote:
>>
>>
>>
>>         On Thursday, May 12, 2016 at 11:51:11 AM UTC+2, Vassilis Virvilis 
>> wrote:
>>
>>             Thomas thanks,
>>
>>             Wow I did this and it works. But it is crazy. Cr is for crazy. 
>> Kudos to jsinterop guys though.
>>
>>                 @JsType(isNative = true, namespace = JsPackage.GLOBAL, name 
>> = "[]")
>>
>>
>>         You should probably use "Array" rather than "[]"
>>          
>>
>>                 public interface CrJsArray<T> {
>>
>>                     public void push(T value);
>>
>>                     @JsProperty
>>                     public int getLength();
>>                 }
>>
>>
>>             I tried your suggestion to cast and __also works__ (eclipse 
>> complains about but with (JavaScriptObject) (Object) my_native_object) it 
>> works and it is definitely better.
>>
>>
>>         Also, for converting from a java.util.Collection to an array, how 
>> about simply using Collection#toArray? (and then passing the array to JS 
>> through JsInterop)
>>          
>>
>>             Questions
>>             1) Is JavaScriptObject scheduled for deprecation?
>>
>>
>>         Yes, it'll be replaced with JsInterop.
>>          
>>
>>             2) Should a native type be able to extend JavascriptObject. 
>> Because right now (2.8pre1) fails at run time. That would make casting a bit 
>> saner. Should I report it somewhere?
>>
>>
>>         This is probably on-purpose.
>>          
>>
>>             I tried to look for the reference you gave but I didn't find it. 
>> Wrong keywords maybe...
>>
>>
>>         I found this: 
>> https://groups.google.com/d/topic/google-web-toolkit/nmBAOX4vcSo/discussion
>>         Not exactly what I remembered, but touches similar points.
>>          
>>
>>
>>             On Thu, May 12, 2016 at 12:20 PM, Thomas Broyer 
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>>                 That question came up already in the forum or in GWT-Contrib 
>> (try to search the archive), and I seem to recall that Goktug said you could 
>> cast @JsType(isNative=true) objects to/from
>>                 JavaScriptObject, so you could use JsArray (and 
>> JsonUtils.safeEval). I think you can also cast to/from an array of 
>> @JsType(isNative=true), so if you don't need to alter the size of
>>                 the JS array you can then use the bracket operators on a 
>> Java array (and cast from/to a JavaScriptObject).
>>                 This is only out of memory, please double check from the 
>> forum archives.
>>
>>
>>                 On Thursday, May 12, 2016 at 10:47:51 AM UTC+2, Vassilis 
>> Virvilis wrote:
>>
>>                     Hi again,
>>
>>                     I am trying to convert a jre collection or build a 
>> jsArray with a isNative=true type.
>>
>>                     Unfortunately this is not possible because JsArray 
>> requires JavascriptObject which is invcompatible (complie time error) with 
>> native classes.
>>
>>                     Any ideas?
>>
>>                     I looked on deep dive jsinterop from Ray Cromwell and it 
>> says that there is not a clean way for jsinterop1 to align collections. Ok I 
>> get that - but there must be a way even if
>>                     not the nicest/cleanest one.
>>
>>                     Otherwise looks like I have to create my own 
>> @jsinteroped MyJsArray which looks wrong.
>>
>>                     -- 
>>                     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 [email protected]
>>                 <mailto:[email protected]>.
>>                 To post to this group, send email to 
>> [email protected] 
>> <mailto:[email protected]>.
>>                 Visit this group at 
>> https://groups.google.com/group/google-web-toolkit.
>>                 For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>>
>>             -- 
>>             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 [email protected] 
>> <mailto:[email protected]>.
>>         To post to this group, send email to 
>> [email protected] 
>> <mailto:[email protected]>.
>>         Visit this group at 
>> https://groups.google.com/group/google-web-toolkit.
>>         For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>>
>>     -- 
>>     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 [email protected] 
>> <mailto:[email protected]>.
>>     To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>>     Visit this group at https://groups.google.com/group/google-web-toolkit.
>>     For more options, visit https://groups.google.com/d/optout.
>
>     -- 
>     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 [email protected] 
> <mailto:[email protected]>.
>     To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
>     Visit this group at https://groups.google.com/group/google-web-toolkit.
>     For more options, visit https://groups.google.com/d/optout.
>
>
>
>
> -- 
> 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 [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/google-web-toolkit.
> For more options, visit https://groups.google.com/d/optout.

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to