With GWT 2.8 yes. It's been suggested that there could be some regexp (or other kind of pattern) matching added later to whitelist/blacklist some @JsType(isNative=false) that you would/wouldn't want to see exported.
-- In the mean time, don't over-use @JsType without isNative=true (in libraries), better (if possible) separate exported types to a specific "application" project to be compiled to a standalone JS script.
Note that for the java.util.List et al. currently annotated with @JsType, the overhead was deemed small enough (because that's only 4 classes without that many subclasses).
My suggestion would be, for GWT 2.8, to only use JsInterop for mapping native objects (i.e. only isNative=true).
Google likely uses JsInterop with isNative=false but with -closureFormattedOutput and an additional round of Closure Compiler optimisations that would prune unused code and re-obfuscate the names.
On Thursday, September 15, 2016 at 11:01:14 AM UTC+2, Vassilis Virvilis wrote:
On Thursday, September 15, 2016 at 11:01:14 AM UTC+2, Vassilis Virvilis wrote:
SoWhat you say is: It is not possible to have a page with:
*** gwtapp + gwtlib + js_export + optimization ***What is possible to have is either or1) gwtapp + gwtlib + optimization
or (xor actually)
2) gwtapp + gwtlib + js_exportright?a) We assume gwtlib has @JsType(isNative=false) typesb) Optimization is used in the broad sense for method and properties renaming, removal and other optimization stepsJens, Thomas thanks a lot for the education.VassilisOn Thu, Sep 15, 2016 at 11:44 AM, Thomas Broyer wrote:Let me try: without -generateJsInteropExports, GWT acts as if @JsType(isNative=false) wasn't there at all.Why'd you want this?
- when @JsType(isNative=false) is applied to types you didn't write yourself (third-party). For example, java.util.Collection, java.util.List, java.util.Map, java.util.Set, and java.lang.Enum are annotated with @JsType. If you don't use -generateJsInteropExports, their non-@JsIgnore⋅d public members won't be renamed, and the @JsProperty and @JsMethod-specified names won't be honored, so you'll have very short (obfuscated) names in your app. If you use -generateJsInteropExports, the given js-names will be honored and your code will be slightly bigger, but then you can pass a java.util.List to JS and you can call getAtIndex and removeAtIndex (for example) on it from JS code.
- when you want to possibly export your project as a standalone JS lib, but have it consumable by GWT apps with all the GWT optimization goodness: your types will be annotated with @JsType, apps that use your GWT library without using -generateJsInteropExports will have highly-optimized code; but you can use -generateJsInteropExports to export your annotated types to create a standalone JS lib. GWT apps consuming your GWT library and using -generateJsInteropExports will pay the price for your @JsType though (see example above about java.util.List), so you'll probably want to separate out some of your code into a project specific to exporting your JS lib (similarly to how GWTUpload/JSUpload did it)
That was Jens' example.
On Thursday, September 15, 2016 at 10:18:55 AM UTC+2, Vassilis Virvilis wrote:In some cases you want the library to act as JS library for one Page but for another page you only plan to link it with the GWT MyApplication (and not export is as a JS library) where normal optimization techniques apply.Unless.... (light bulb goes on)Jens sorry - one more round if you pleaseThis GWT library is source right? That means it is compiled by the compilation session of MyApplication right?
> The library exists as GWT library (*.jar file with *.gwt.xml)...Is that it? If so tricky...VassilisOn Thu, Sep 15, 2016 at 1:54 AM, Jens wrote:Is this GWT library exported as JS only? ...So I don't get it. What am I missing?The library exists as GWT library (*.jar file with *.gwt.xml) so you can use it right away in your GWT app, but the library is also exported by the library maintainer to JavaScript so that JavaScript people can also use it right away by including a *.js file.In that case your app does not want to use -generateJsInteropExports because it directly uses the GWT library which has @JsType(isNative = false) all over the place in its Java files. If you would use -generateJsInteropExport in your app, it would have a negative impact on your code size because these @JsType classes would not be optimized/pruned then. Now imagine you have several of such libraries in your app.-- J.
--Vassilis Virvilis
--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 google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment