I've been testing JsInterop for 'export java lib to js' use case and two things came up:
1. Annotations have RetentionPolicy.RUNTIME which means the library I'm exporting must have compile time dependency on gwt-user. There are 2 ways to fix it: change the retention to 'source' (AutoValue does that so there is no need for compile time dependency on AutoValue annotations) or generate separate artifact with jsinterop annotations only. I guess nicer way to accomplish this would be the former but I'm not sure if it's possible. For now I'm hiding* the annotations in my base artifact. 2. The library I'm trying to export has several overloads of constructors and methods. Write now for methods I'm using @JsMethod with name to describe parameter types. For constructors there are 2 approaches I took so far. One recommended is having one @JsConstructor which is called from other @JsIgnored. The other approach is hiding* all constructors and providing single @JsConstructor Constructor(Objects...) which detects number of params and their types and mimics overloaded constructors. This generates a WARN 'unusable-by-js' which can be suppressed. Accessing such constructor from js works but requires wrapping of params with array: 'new namespace.Constructor([param1, param2, paramN]);' * by hiding I mean automatic commenting out from base source so the alternative artifact doesn't have them. On Friday, December 4, 2015 at 8:49:02 PM UTC+1, Goktug Gokdogan wrote: > > That's not fixed yet. Should be fixed before RC1. > > On Fri, Dec 4, 2015 at 7:23 AM, Ümit Seren <[email protected] > <javascript:>> wrote: > >> I guess I can't put native JsInterop classes and interfaces in Java >> Collections ? >> I get a ClassCastException and I checked the official JsInterop >> documentation and couldn't find anthing about that ? >> >> >> On Saturday, November 21, 2015 at 5:02:13 AM UTC+1, Goktug Gokdogan wrote: >>> >>> dramaix@ is writing such a tool; that's how we are planning to generate >>> Elemental2. >>> >>> On Fri, Nov 20, 2015 at 7:56 PM, Slava Pankov <[email protected]> wrote: >>> >>>> And it would be nice to generate java code with new jsinterop >>>> annotations based on typescript d.ts files. Dart team is going to >>>> implement >>>> such tool, probably it can be adopted for GWT as well: >>>> https://github.com/dart-lang/sdk/issues/24874 >>>> >>>> >>>> On Thursday, November 19, 2015 at 10:15:35 AM UTC-8, Goktug Gokdogan >>>> wrote: >>>>> >>>>> Instead of JsArray, you can use Object[] or JsType[] (will be ready by >>>>> 2.8), instead of Integer, you can Double (in 2.8 release, Double exactly >>>>> maps to number in javascript). >>>>> >>>>> On Thu, Nov 19, 2015 at 6:22 AM, Paul Stockley <[email protected]> >>>>> wrote: >>>>> >>>>>> We wrote our own RPC mechanism that is based entirely on JSON, mainly >>>>>> for performance reasons on mobile. The client works with JS Overlay >>>>>> representation of the server DTO objects. We have a tool that >>>>>> automatically >>>>>> generates the JSO's, Looking at the new interop spec's it would be >>>>>> really >>>>>> nice for the client and server to work with the same Java DTO objects. I >>>>>> can see how most of it could work with the new system. However, we >>>>>> handle >>>>>> Java object representations for ints, doubles, booleans and also >>>>>> enumerations by generating code in the JSO's such as : >>>>>> >>>>>> public class ContractDoJSO extends PersistentDataObjectBaseJSO { >>>>>> >>>>>> protected ContractDoJSO() {} >>>>>> >>>>>> >>>>>> public final native ContractType getContractTypeDv() /*-{ >>>>>> >>>>>> return (this.contractTypeDv == null) ? null : >>>>>> @com.ocs.shared.businesslogic.contract.ContractType::valueOf(Ljava/lang/String;)(this.contractTypeDv); >>>>>> >>>>>> >>>>>> }-*/; >>>>>> >>>>>> >>>>>> public final native void setContractTypeDv(ContractType v) /*-{ >>>>>> this.contractTypeDv = (v == null) ? null : >>>>>> [email protected]::name()(); }-*/; >>>>>> >>>>>> >>>>>> public final native java.lang.Integer getPreferredEmployerId() /*-{ >>>>>> >>>>>> return (this.preferredEmployerId == null) ? null : >>>>>> @java.lang.Integer::valueOf(I)(this.preferredEmployerId); >>>>>> >>>>>> }-*/; >>>>>> public final native void setPreferredEmployerId(java.lang.Integer v) >>>>>> /*-{ >>>>>> >>>>>> this.preferredEmployerId = (v == null) ? null : >>>>>> [email protected]::intValue()(); >>>>>> >>>>>> }-*/; >>>>>> >>>>>> >>>>>> In addition, if the DTO's contain arrays the client code has to >>>>>> access them using the JsArray class rather than the java collection API. >>>>>> Do >>>>>> you think there is some way to have a single representation using the >>>>>> new >>>>>> Interop mechanism? >>>>>> >>>>>> >>>>>> On Friday, October 23, 2015 at 3:13:55 AM UTC-4, Goktug Gokdogan >>>>>> wrote: >>>>>> >>>>>>> As we are getting close to 2.8 release I wrote a new document that >>>>>>> is concentrating on jsinterop features to be released in 2.8: >>>>>>> >>>>>>> https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit# >>>>>>> >>>>>>> Please share your feedback. >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Goktug >>>>>>> >>>>>> -- >>>>>> 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/1155c295-ecd1-4cdd-86a2-ddf3cffb618c%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/1155c295-ecd1-4cdd-86a2-ddf3cffb618c%40googlegroups.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/44c98d88-8d67-4f17-b942-4f7202aeac3b%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/44c98d88-8d67-4f17-b942-4f7202aeac3b%40googlegroups.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] >> <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/google-web-toolkit-contributors/cd869b99-e7c5-4caa-b105-ce1e533ff8a8%40googlegroups.com >> >> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/cd869b99-e7c5-4caa-b105-ce1e533ff8a8%40googlegroups.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/e63f9a61-7f1c-415e-8a5e-34b0f1b04679%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
