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.