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
-~----------~----~----~----~------~----~------~--~---

Reply via email to