Deferred binding bug in 2.7

393 views
Skip to first unread message

Erik Kuefler

unread,
Nov 6, 2014, 1:17:05 AM11/6/14
to google-web-tool...@googlegroups.com
I posted earlier about a bug I was seeing in the 2.7 beta, and it looks like it's still there in RC1. I don't have a minimal repro case yet, and it might be tough to make one, but I do have a bit more information.

The problem occurs when trying to compute the deferred binding result for some (not all) of the UiBinders in my application. When I run with loglevel=DEBUG, it's suggesting that there's a compilation failure when processing the one deferred binding rule I have in my top-level gwt.xml. That rule looks like this:

<replace-with class="client.environment.ProdEnvironment">
  <when-type-assignable class="client.environment.Environment"/>
</replace-with>

The log shows that everything works fine for most of the UiBinders - they skip over this rule (which is always the first one they check, probably because it's at the root of the inheritance chain) and eventually find the right one:

   Computing all possible rebind results for 'client.widget.band.BandView.MyUiBinder'
      Rebinding client.widget.band.BandView.MyUiBinder
         Checking rule <replace-with class='client.environment.ProdEnvironment'/>
            Checking if all subconditions are true (<all>)
      <when-assignable class='client.environment.Environment'/>
                  No, the requested type was not assignable
               No: One or more subconditions was false
         Rule did not match
         Found better fallback match for <replace-with class='client.environment.ProdEnvironment'/>
         Checking rule <generate-with class='com.google.web.bindery.autobean.gwt.rebind.AutoBeanFactoryGenerator'/>
            Checking if all subconditions are true (<all>)
      <when-assignable class='com.google.web.bindery.autobean.shared.AutoBeanFactory'/>
                  No, the requested type was not assignable
      No: One or more subconditions was false
         Rule did not match
         Found better fallback match for <generate-with class='com.google.web.bindery.autobean.gwt.rebind.AutoBeanFactoryGenerator'/>
              /* ... snip 100's of lines checking other rules */ 
         Checking rule <generate-with class='com.google.gwt.uibinder.rebind.UiBinderGenerator'/>
            Checking if all subconditions are true (<all>)
      <when-assignable class='com.google.gwt.uibinder.client.UiBinder'/>
                  Yes, the requested type was assignable
               Yes: All subconditions were true
         Rule was a match and will be used
         Invoking generator com.google.gwt.uibinder.rebind.UiBinderGenerator
            Parsing CSS stylesheet file:/var/folders/99/npwplk0x5s716r29tmllw_7h0000gn/T/uiBinder_client.widget.band_BandView_MyUiBinderImpl_GenCss_style1449650163126694696.css
            Generator returned type 'client.widget.band.BandView_MyUiBinderImpl; mode USE_ALL_NEW_WITH_NO_CACHING; in 15 ms                                                                                              
         Rebind result was client.widget.band.BandView_MyUiBinderImpl

But for just a few UiBinders, it crashes when checking the deferred binding rule:

   Computing all possible rebind results for 'client.AddParametersView.MyUiBinder'
      Rebinding client.pages.AddParametersView.MyUiBinder
         Checking rule <replace-with class='client.environment.ProdEnvironment'/>
            Checking if all subconditions are true (<all>)
               <when-assignable class='client.environment.Environment'/>
                  Tracing compile failure path for type 'client.pages.AddParametersView.MyUiBinder'
                     Checked 0 dependencies for errors.
                  [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly                                                                          
   [ERROR] Errors in 'client/pages/AddParametersView.java'
      [ERROR] Line 33: Failed to resolve 'client.pages.AddParametersView.MyUiBinder' via deferred binding

There's no hint of what's causing the compile failure, but there are only a few places in GWT that log that message, so someone more familiar with the internals might be able to tell what's going on. When I remove my deferred binding rule, the errors go away. There are no changes in my code other than switching the dependency from 2.6.1 to 2.7.0-rc1.

Does this ring any bells around what the problem might be, or should I try digging deeper into figuring out what's different about the UiBinders with errors? I might have a little time this weekend but I'm not sure how deep I'll be able to go.

Goktug Gokdogan

unread,
Nov 6, 2014, 3:26:03 PM11/6/14
to google-web-toolkit-contributors
Without a repro case and debugging the best suggestion we have is to enable "strict" mode in your compilation. This might show some additional compilation errors but it's your best shot.
When you are looking at the errors, you will probably see some errors in "client.pages.AddParametersView.MyUiBinder" or one of its references and that's probably the culprit.


--
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 google-web-toolkit-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/ae0c9922-98b4-4e87-bdf7-732a6388ba55%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Erik Kuefler

unread,
Nov 10, 2014, 2:16:50 AM11/10/14
to google-web-tool...@googlegroups.com
Cool, didn't know about strict, that found the underlying cause for me. The issue was actually due to the i18n changes in switching to CLDR 25, which seems to have removed several time zones. We're using an old calendar library (https://code.google.com/p/gwt-calendar-class/) that apparently referenced them. I have no idea why this error manifested in this particular way that depended on my deferred binding rule, but when I hack the library to remove those references everything works. Thanks!
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit-contributors+unsubscribe@googlegroups.com.

Goktug Gokdogan

unread,
Nov 10, 2014, 2:54:47 PM11/10/14
to google-web-toolkit-contributors
I'm glad you solved it.
For future references, in general it is good idea to keep the strict enabled - though some libraries that are not in your control might cause compilation problems that you cannot fix without changing the lib.

To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/e340507b-7610-4ec8-ad12-0289c419e778%40googlegroups.com.

Jens

unread,
Nov 10, 2014, 3:17:18 PM11/10/14
to google-web-tool...@googlegroups.com
I'm glad you solved it.
For future references, in general it is good idea to keep the strict enabled - though some libraries that are not in your control might cause compilation problems that you cannot fix without changing the lib.

IMHO GWT 3.0 should turn on -strict by default and provide a -lenient mode.

-- J.
Reply all
Reply to author
Forward
0 new messages