It looks like changes to a few rebind rules are generating some new logspam 
when any GWT app compiles. Specifically, I'm seeing FocusImpl and 
LayoutImpl, though its possible there are others I haven't seen yet. From 
the dynatable example we can see the FocusImpl spam:
gwtc:
     [java] Compiling module com.google.gwt.sample.dynatable.DynaTable
     [java]    Computing all possible rebind results for 
'com.google.gwt.user.client.ui.impl.FocusImpl'
     [java]       Rebinding com.google.gwt.user.client.ui.impl.FocusImpl
*     [java]          Could not find an exact match rule. Using 'closest' 
rule <replace-with 
class='com.google.gwt.user.client.ui.impl.FocusImplIE6'/> based on fall 
back values. You may need to implement a specific binding in case the fall 
back behavior does not replace the missing binding*
     [java]    Compiling 5 permutations
     [java]       Compiling permutation 0...
     [java]       Process output
     [java]          Compiling
     [java]             Compiling permutation 1...
     [java]       Compiling permutation 2...
     [java]       Compiling permutation 3...


First, the rules themselves:
  <!-- Firefox uses a hidden input to set accesskeys -->
  <replace-with 
class="com.google.gwt.user.client.ui.impl.FocusImplStandard">
    <when-type-is class="com.google.gwt.user.client.ui.impl.FocusImpl"/>
    <when-property-is name="user.agent" value="gecko1_8"/>
  </replace-with>

  <!-- Safari uses a hidden input to set accesskeys and -->
  <!-- fires focus/blur after a timeout                 -->
  <replace-with class="com.google.gwt.user.client.ui.impl.FocusImplSafari">
    <when-type-is class="com.google.gwt.user.client.ui.impl.FocusImpl"/>
    <when-property-is name="user.agent" value="safari"/>
  </replace-with>

  <!-- IE's implementation traps exceptions on invalid setFocus() -->
  <replace-with class="com.google.gwt.user.client.ui.impl.FocusImplIE6">
    <when-type-is class="com.google.gwt.user.client.ui.impl.FocusImpl"/>
    <all>
      <any>
        <when-property-is name="user.agent" value="ie6"/>
        <when-property-is name="user.agent" value="ie8"/>
      </any>
      <none>
        <when-property-is name="user.agent" value="ie9"/>
      </none>
    </all>
  </replace-with>

No express binding of FocusImpl to itself, or to Standard (interestingly 
Standard really seems to mean Gecko, at least according to that comment, 
calling out a FF specific issue). I can't comment much on that just yet, 
though I might make a suggestion later. 

This code is as a result of https://gwt-review.googlesource.com/#/c/5055/ 
(or 
https://gwt.googlesource.com/gwt/+/040b3e4392186e48689a6fc1f19cdf294f2b5651 
if you like), ostensibly to make IE9+ use FocusImpl instead of FocusImplIE6 
(or Standard, for example).

[java]    Computing all possible rebind results for 
'com.google.gwt.user.client.ui.impl.FocusImpl'

...

[java]          Found better fallback match for <replace-with 
class='com.google.gwt.user.client.ui.impl.FormPanelImpl'/>
[java]          Checking rule <replace-with 
class='com.google.gwt.user.client.ui.impl.FocusImplIE6'/>
[java]             Checking if all subconditions are true (<all>)
[java]                <when-type-is 
class='com.google.gwt.user.client.ui.impl.FocusImpl'/>
[java]                   Yes, the requested type was an exact match
[java]                Checking if all subconditions are true (<all>)
[java]                   Checking if any subcondition is true (<any>)
[java]                      <when-property-is name='user.agent' 
value='ie8'/>
[java]                         Property value is '*ie9*'
[java]                         Property value 'ie8' is the fallback of 
'[[ie9]]'
[java]                         No, the value did not match
[java]                      No: All subconditions were false
[java]                   No: One or more subconditions was false
[java]                No: One or more subconditions was false
[java]          Rule did not match
[java]          Found better fallback match for <replace-with 
class='com.google.gwt.user.client.ui.impl.FocusImplIE6'/>
[java]          Checking rule <replace-with 
class='com.google.gwt.user.client.ui.impl.FocusImplSafari'/>
[java]             Checking if all subconditions are true (<all>)
[java]                <when-type-is 
class='com.google.gwt.user.client.ui.impl.FocusImpl'/>
[java]                   Yes, the requested type was an exact match
[java]                <when-property-is name='user.agent' value='safari'/>
[java]                   Property value is 'ie9'
[java]                   No, the value did not match
[java]                No: One or more subconditions was false
[java]          Rule did not match
[java]          Checking rule <replace-with 
class='com.google.gwt.user.client.ui.impl.FocusImplStandard'/>
[java]             Checking if all subconditions are true (<all>)
[java]                <when-type-is 
class='com.google.gwt.user.client.ui.impl.FocusImpl'/>
[java]                   Yes, the requested type was an exact match
[java]                <when-property-is name='user.agent' value='gecko1_8'/>
[java]                   Property value is 'ie9'
[java]                   No, the value did not match
[java]                No: One or more subconditions was false
[java]          Rule did not match

...

[java]          Could not find an exact match rule. Using 'closest' rule 
<replace-with class='com.google.gwt.user.client.ui.impl.FocusImplIE6'/> 
based on fall back values. You may need to implement a specific binding in 
case the fall back behavior does not replace the missing binding
[java]          No exact match was found, using closest match rule 
<replace-with class='com.google.gwt.user.client.ui.impl.FocusImplIE6'/>
[java]          Rebind result was 
com.google.gwt.user.client.ui.impl.FocusImplIE6

>From this abbreviated log, apparently IE9 is still using the IE6 impl, 
rather than ignoring any rebind rule and using the actual argument to 
GWT.create. 

My *guess* is that this has been the case since the patch linked was 
authored, and checking out 040b3e4392186e48689a6fc1f19cdf294f2b5651 seems 
to confirm this - building dynatable still has this log message, indicating 
that IE9 has been using IE6 all along, despite the commit message. The 
linked issue 
https://code.google.com/p/google-web-toolkit/issues/detail?id=8383 (which I 
didn't read until just now, and could have saved me a fair bit of time...) 
seems to confirm this.

My goal in this quick bit of debugging is to get us to a stable GWT release 
that doesn't add useless logging. To that end, I think 
040b3e4392186e48689a6fc1f19cdf294f2b5651 must be reverted, since it has no 
effect, and adds confusing log messages that might suggest to the user that 
they have made a mistake. The commit at 
https://gwt.googlesource.com/gwt/+/a0a0c20713cbc2d0fc8dd262f066da9f2412c93a 
should get the same treatment (LayoutImpl), and I'll be walking a few more 
commits to confirm that everything else looks safe.

The other option is to declare explicitly to bind FocusImpl to FocusImpl 
(with or without a 'useragent=ie9' check) so that this is then the closest 
matching rule. Since we haven't actually been testing IE9 with the 'real' 
implementation all along, we have no real idea right now what would happen 
if we did this, so I'm inclined against it.

Thoughts or concerns about this issue and any fix?

-- 
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/e1628118-bb35-4d5a-aa31-b9ba1ce070ba%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to