Friday, June 16, 2023

Re: Devmode compilation

Your stack trace stops just before where the issue is happening, but the GWT compiler believes that you are using code in an impossible way, and is forced to emit an error message to correctly compile out impossible code. Roughly, the "throw ClassCastException unless null" check means that there is some cast that must always fail - nothing ever implements the interface, or nothing ever calls the constructor. In draft mode, the compiler couldn't prove this, but when you were building for production, the compiler is confident that this is impossible.

What is likely happening is that you are doing an unchecked cast of some kind, possibly a native JS type to a @JsType-annotated interface that isn't marked as isNative=true or the like. In this scenario, the compiler knows that no native types could implement the interface, and since it sees no non-native types that implement it, there must be no such types, so any calls to the interface's methods are actually errors. Further, any code that would come after such a method call can never be called.

Look at the next frame up the stack trace, and see if you can tell what method call is being optimized out in this way. Probably you'll see that it either comes from a class or interface that can't be directly instantiated, but somehow (likely an unchecked cast) you have an instance of that type anyway.

As to correctness, this is a good check to have, as it removes impossible code, which _usually_ you don't want to have. Incorrect code can often lead to impossible code, but there are many reasonable cases where this check should be emitted, so it isnt necessarily wrong for a compiled application to have this.

On Friday, June 16, 2023 at 2:25:53 PM UTC-5 nikola wrote:
Some class cast exception...

Showing dialog with error2 Error: java.lang.ClassCastException
    at ClassCastException.createError (lw_ui-0.js:2052:10)
    at ClassCastException.initializeBackingError (lw_ui-0.js:2078:40)
    at ClassCastException.Throwable_0 (lw_ui-0.js:2017:8)
    at ClassCastException.Exception_0 (lw_ui-0.js:2095:15)
    at ClassCastException.RuntimeException_0 (lw_ui-0.js:16350:15)
    at new ClassCastException (lw_ui-0.js:217687:22)
    at checkCriticalType (lw_ui-0.js:225523:16)
    at throwClassCastExceptionUnlessNull (lw_ui-0.js:272:3)

It works with -draftCompile. What we are potentially losing having code compiled with -draftCompile? Is it safe to have it on production?

On Friday, June 16, 2023 at 7:36:50 PM UTC+2 Colin Alworth wrote:
Super Dev Mode skips many optimizations, both to decrease compile times and also to make incremental compilations possible - it isn't possible to make SDM behave the exact same as a production compile. One way you can get close is to specify -draftCompile (how you specify it may vary based on how you run the compiler) so that the production build skips many optimizations.

Can you elaborate on what the strange error is?

On Friday, June 16, 2023 at 11:32:37 AM UTC-5 nikola wrote:

The code has passed in development mode but when it's deployed I got an strange error. Is there a difference in generated compiled code when deployed and code in development mode ?
And if true, where can I change that setting to have it equals

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
To view this discussion on the web visit

No comments:

Post a Comment