Reviewers: rjrjr,

Description:
Remove FieldWriter.setAttachable() and find out automatically whether
the callbacks should be created.

Review by: rj...@google.com

Please review this at http://gwt-code-reviews.appspot.com/1421807/

Affected files:
M user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java
  M user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
  M user/src/com/google/gwt/uibinder/rebind/FieldManager.java
  M user/src/com/google/gwt/uibinder/rebind/FieldWriter.java


Index: user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java
===================================================================
--- user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java (revision 10089) +++ user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java (working copy)
@@ -32,8 +32,6 @@
       final UiBinderWriter writer) throws UnableToCompleteException {

     assert writer.useLazyWidgetBuilders();
-    writer.getFieldManager().lookup(fieldName)
-        .setAttachable(true);

     /*
      * Gathers up elements that indicate nested Attachable objects.
Index: user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
===================================================================
--- user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java (revision 10089) +++ user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java (working copy)
@@ -23,6 +23,7 @@
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.uibinder.rebind.model.OwnerField;
+import com.google.gwt.user.client.ui.AttachableHTMLPanel;

 import java.util.ArrayList;
 import java.util.Arrays;
@@ -58,7 +59,6 @@
   private boolean written;
   private int buildPrecedence;
   private MortalLogger logger;
-  private boolean isAttachable;

   public AbstractFieldWriter(String name, MortalLogger logger) {
     if (name == null) {
@@ -110,11 +110,6 @@

   public void needs(FieldWriter f) {
     needs.add(f);
-  }
-
-  @Override
-  public void setAttachable(boolean attachable) {
-    this.isAttachable = attachable;
   }

   @Override
@@ -183,8 +178,15 @@

   @Override
   public void writeFieldDefinition(IndentedWriter w, TypeOracle typeOracle,
-      OwnerField ownerField, DesignTimeUtils designTime, int getterCount)
+      OwnerField ownerField, DesignTimeUtils designTime, int getterCount,
+      boolean useLazyWidgetBuilders)
       throws UnableToCompleteException {
+
+    JClassType attachableHTMLPanelType = typeOracle.findType(
+        AttachableHTMLPanel.class.getName());
+    boolean outputAttachDetachCallbacks = useLazyWidgetBuilders
+        && getAssignableType() != null
+        && getAssignableType().isAssignableTo(attachableHTMLPanelType);

     // Check initializer.
     if (initializer == null) {
@@ -238,7 +240,7 @@
     if (attachStatements.size() > 0) {
       w.newline();
       w.write("// Attach section.");
-      if (isAttachable) {
+      if (outputAttachDetachCallbacks) {
         // TODO(rdcastro): This is too coupled with AttachableHTMLPanel.
         // Make this nicer.
         w.write("%s.wrapInitializationCallback = ", getName());
@@ -265,7 +267,7 @@
         w.write(s);
       }

-      if (isAttachable) {
+      if (outputAttachDetachCallbacks) {
         w.outdent();
         w.write("}");
         w.outdent();
@@ -282,7 +284,7 @@
     }

     if (detachStatements.size() > 0) {
-      if (isAttachable) {
+      if (outputAttachDetachCallbacks) {
         w.write("%s.detachedInitializationCallback = ", getName());
         w.indent();
         w.indent();
@@ -296,7 +298,7 @@
         w.write(s);
       }

-      if (isAttachable) {
+      if (outputAttachDetachCallbacks) {
         w.outdent();
         w.write("}");
         w.outdent();
Index: user/src/com/google/gwt/uibinder/rebind/FieldManager.java
===================================================================
--- user/src/com/google/gwt/uibinder/rebind/FieldManager.java (revision 10089)
+++ user/src/com/google/gwt/uibinder/rebind/FieldManager.java   (working copy)
@@ -287,8 +287,13 @@
     Collection<FieldWriter> fields = fieldsMap.values();
     for (FieldWriter field : fields) {
       int counter = getGetterCounter(field.getName());
-      field.writeFieldDefinition(writer, typeOracle,
-          ownerClass.getUiField(field.getName()), designTime, counter);
+      field.writeFieldDefinition(
+          writer,
+          typeOracle,
+          ownerClass.getUiField(field.getName()),
+          designTime,
+          counter,
+          useLazyWidgetBuilders);
     }
   }

Index: user/src/com/google/gwt/uibinder/rebind/FieldWriter.java
===================================================================
--- user/src/com/google/gwt/uibinder/rebind/FieldWriter.java (revision 10089)
+++ user/src/com/google/gwt/uibinder/rebind/FieldWriter.java    (working copy)
@@ -126,9 +126,6 @@
    */
   void needs(FieldWriter f);

-  // TODO(rdcastro): Remove this and detect automatically.
-  void setAttachable(boolean isAttachableOutput);
-
   /**
* Sets the precedence of this field builder. Field with higher values are
    * written first.
@@ -206,6 +203,7 @@
    * </p>
    */
   void writeFieldDefinition(IndentedWriter w, TypeOracle typeOracle,
-      OwnerField ownerField, DesignTimeUtils designTime, int getterCount)
+      OwnerField ownerField, DesignTimeUtils designTime, int getterCount,
+      boolean useLazyWidgetBuilders)
       throws UnableToCompleteException;
 }


--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to