Reviewers: Ray Ryan, Description: UiBinderGenerator is not stable and results extra compiles during web app reload. In order to avoid unnecessary compiles and type oracle refreshes, code generators must be stable.
This patch is a partial fix in that visitation orders have been stabilized, however the issue of generated, unique DOM element identifiers still exists and will prevent UiBinder from being completely stable. Please see issue http://code.google.com/p/google-web-toolkit/issues/detail?id=4067 for more details. Please review this at http://gwt-code-reviews.appspot.com/67808 Affected files: user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java user/src/com/google/gwt/uibinder/rebind/model/OwnerClass.java Index: user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java --- user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java (revision 6102) +++ user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java (working copy) @@ -19,7 +19,7 @@ import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.core.ext.typeinfo.JClassType; import com.google.gwt.core.ext.typeinfo.JType; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; /** @@ -33,7 +33,7 @@ abstract class AbstractFieldWriter implements FieldWriter { + " @UiConstructor."; private final String name; - private final Set<FieldWriter> needs = new HashSet<FieldWriter>(); + private final Set<FieldWriter> needs = new LinkedHashSet<FieldWriter>(); private String initializer; private boolean written; private MortalLogger logger; Index: user/src/com/google/gwt/uibinder/rebind/model/OwnerClass.java --- user/src/com/google/gwt/uibinder/rebind/model/OwnerClass.java (revision 6102) +++ user/src/com/google/gwt/uibinder/rebind/model/OwnerClass.java (working copy) @@ -26,9 +26,12 @@ import com.google.gwt.uibinder.rebind.MortalLogger; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; /** * Model class with all attributes of the owner class. @@ -40,7 +43,7 @@ public class OwnerClass { * Map from field name to model. */ private final Map<String, OwnerField> uiFields = - new HashMap<String, OwnerField>(); + new TreeMap<String, OwnerField>(); /** * Map from field type to model. @@ -75,6 +78,16 @@ public class OwnerClass { findUiFields(ownerType); findUiFactories(ownerType); findUiHandlers(ownerType); + + /* + * Ensure that the order of these ui handlers is stable to avoid unnecessary + * compilation passes. + */ + Collections.sort(uiHandlers, new Comparator<JMethod>() { + public int compare(JMethod arg0, JMethod arg1) { + return arg0.getJsniSignature().compareTo(arg1.getJsniSignature()); + } + }); } /** --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---