Revision: 9402
Author: b...@google.com
Date: Fri Dec 10 06:38:12 2010
Log: Integrate r9401 to the GWT 2.1 branch.
Allow @Editor.Path("") as a valid annotation to indicate that a sub-editor should be aliased to the object being edited by its parent object.

http://code.google.com/p/google-web-toolkit/source/detail?r=9402

Modified:
/releases/2.1/user/src/com/google/gwt/editor/client/impl/AbstractEditorDelegate.java /releases/2.1/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java /releases/2.1/user/src/com/google/gwt/editor/rebind/SimpleBeanEditorDriverGenerator.java
 /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorAccess.java
 /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorData.java
 /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorModel.java
/releases/2.1/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryEditorDriverGenerator.java
 /releases/2.1/user/test/com/google/gwt/editor/EditorSuite.java
/releases/2.1/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java /releases/2.1/user/test/com/google/gwt/editor/rebind/model/EditorModelTest.java

=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/client/impl/AbstractEditorDelegate.java Fri Sep 24 12:10:50 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/client/impl/AbstractEditorDelegate.java Fri Dec 10 06:38:12 2010
@@ -187,6 +187,9 @@
   public abstract HandlerRegistration subscribe();

   protected String appendPath(String path) {
+    if (path.length() == 0) {
+      return this.path;
+    }
     return appendPath(this.path, path);
   }

=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java Wed Oct 6 16:38:47 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java Fri Dec 10 06:38:12 2010
@@ -174,9 +174,9 @@
               delegateFields.get(d));
         } else if (d.isLeafValueEditor()) {
// if (can().access().without().npe()) { editor.subEditor.setValue() } - sw.println("if (%4$s) editor.%1$s.setValue(getObject()%2$s.%3$s());", + sw.println("if (%4$s) editor.%1$s.setValue(getObject()%2$s%3$s);",
               d.getSimpleExpression(), d.getBeanOwnerExpression(),
-              d.getGetterName(), d.getBeanOwnerGuard("getObject()"));
+              d.getGetterExpression(), d.getBeanOwnerGuard("getObject()"));
           // simpleEditor.put("some.path", editor.simpleEditor());
           sw.println("simpleEditors.put(\"%s\", editor.%s);",
               d.getDeclaredPath(), d.getSimpleExpression());
@@ -259,8 +259,8 @@
           // if (can().access().without().npe()) {
           sw.println("if (%s) {", d.getBeanOwnerGuard("getObject()"));
           // subDelegate.refresh(getObject().getFoo().getBar());
- sw.indentln("%s.refresh(getObject()%s.%s());", delegateFields.get(d),
-              d.getBeanOwnerExpression(), d.getGetterName());
+ sw.indentln("%s.refresh(getObject()%s%s);", delegateFields.get(d),
+              d.getBeanOwnerExpression(), d.getGetterExpression());
           // } else { subDelegate.refresh(null); }
sw.println("} else { %s.refresh(null); }", delegateFields.get(d));
           sw.outdent();
@@ -270,9 +270,9 @@
           sw.println("if (editor.%s != null) {", d.getSimpleExpression());
           sw.indent();
// if (can().access().without().npe()) { editor.subEditor.setValue() } - sw.println("if (%4$s) editor.%1$s.setValue(getObject()%2$s.%3$s());", + sw.println("if (%4$s) editor.%1$s.setValue(getObject()%2$s%3$s);",
               d.getSimpleExpression(), d.getBeanOwnerExpression(),
-              d.getGetterName(), d.getBeanOwnerGuard("getObject()"));
+              d.getGetterExpression(), d.getBeanOwnerGuard("getObject()"));
           // else { editor.subEditor.setValue(null); }
           sw.println("else { editor.%s.setValue(null); }",
               d.getSimpleExpression());
=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/rebind/SimpleBeanEditorDriverGenerator.java Wed Sep 15 02:26:39 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/rebind/SimpleBeanEditorDriverGenerator.java Fri Dec 10 06:38:12 2010
@@ -55,9 +55,9 @@
       Map<EditorData, String> delegateFields) {
     // fooDelegate.initialize(appendPath("foo"), getObject().getFoo(),
     // editor.fooEditor);
-    sw.println("%s.initialize(appendPath(\"%s\"), getObject()%s.%s(),"
+    sw.println("%s.initialize(appendPath(\"%s\"), getObject()%s%s,"
         + " editor.%s, delegateMap);", delegateFields.get(d),
-        d.getPropertyName(), d.getBeanOwnerExpression(), d.getGetterName(),
+ d.getPropertyName(), d.getBeanOwnerExpression(), d.getGetterExpression(),
         d.getSimpleExpression());
   }
 }
=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorAccess.java Thu Sep 16 04:46:26 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorAccess.java Fri Dec 10 06:38:12 2010
@@ -102,8 +102,8 @@
   }

   /**
-   * Returns <code> true if the editor accessed by this EditorAccess
-   * implements the IsEditor interface.
+ * Returns {...@code true} if the editor accessed by this EditorAccess implements
+   * the IsEditor interface.
    */
   public boolean isEditor() {
     return isEditor;
=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorData.java Wed Oct 13 06:40:20 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorData.java Fri Dec 10 06:38:12 2010
@@ -85,8 +85,7 @@
       }
       try {
         data.editorExpression = (parent == null ? ""
-            : (parent.getExpression() + "."))
-            + access.getExpresson();
+            : (parent.getExpression() + ".")) + access.getExpresson();
         data.path = (parent == null ? "" : (parent.getPath() + "."))
             + access.getPath();

@@ -103,8 +102,8 @@
       }
     }

-    public Builder getterName(String value) {
-      data.getterName = value;
+    public Builder getterExpression(String value) {
+      data.getterExpression = value;
       return this;
     }

@@ -131,7 +130,7 @@
   private JClassType editedType;
   private JClassType editorType;
   private String editorExpression;
-  private String getterName;
+  private String getterExpression;
   private boolean isLeaf;
   private boolean isCompositeEditor;
   private boolean isDelegateRequired;
@@ -179,8 +178,12 @@
     return editorExpression;
   }

-  public String getGetterName() {
-    return getterName;
+  /**
+ * Returns an expression, relative to an instance of the parent object being
+   * edited, to retrieve the value to pass into the editor.
+   */
+  public String getGetterExpression() {
+    return getterExpression;
   }

   /**
=======================================
--- /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorModel.java Wed Oct 6 16:38:47 2010 +++ /releases/2.1/user/src/com/google/gwt/editor/rebind/model/EditorModel.java Fri Dec 10 06:38:12 2010
@@ -455,6 +455,9 @@

     JClassType lookingAt = proxyType;
     part : for (int i = 0, j = parts.length; i < j; i++) {
+      if (parts[i].length() == 0) {
+        continue;
+      }
       String getterName = camelCase("get", parts[i]);

for (JClassType search : lookingAt.getFlattenedSupertypeHierarchy()) {
@@ -494,7 +497,7 @@
     }

     int idx = interstitialGetters.lastIndexOf(".");
- builder.beanOwnerExpression(idx == 0 ? "" : interstitialGetters.substring( + builder.beanOwnerExpression(idx <= 0 ? "" : interstitialGetters.substring(
         0, idx));
     if (parts.length > 1) {
       // Strip after last && since null is a valid value
@@ -502,8 +505,13 @@
           interstitialGuard.length());
       builder.beanOwnerGuard(interstitialGuard.substring(8));
     }
-    builder.getterName(interstitialGetters.substring(idx + 1,
-        interstitialGetters.length() - 2));
+    if (interstitialGetters.length() > 0) {
+      builder.getterExpression("."
+          + interstitialGetters.substring(idx + 1,
+              interstitialGetters.length() - 2) + "()");
+    } else {
+      builder.getterExpression("");
+    }
     builder.setterName(setterName);
   }

=======================================
--- /releases/2.1/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryEditorDriverGenerator.java Wed Sep 15 02:26:39 2010 +++ /releases/2.1/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryEditorDriverGenerator.java Fri Dec 10 06:38:12 2010
@@ -89,9 +89,9 @@
   protected void writeDelegateInitialization(SourceWriter sw, EditorData d,
       Map<EditorData, String> delegateFields) {
     sw.println("%s.initialize(eventBus, factory, "
-        + "appendPath(\"%s\"), getObject()%s.%s()," + " editor.%s,"
+        + "appendPath(\"%s\"), getObject()%s%s," + " editor.%s,"
         + " delegateMap, request);", delegateFields.get(d),
-        d.getPropertyName(), d.getBeanOwnerExpression(), d.getGetterName(),
-        d.getSimpleExpression());
+        d.getPropertyName(), d.getBeanOwnerExpression(),
+        d.getGetterExpression(), d.getSimpleExpression());
   }
 }
=======================================
--- /releases/2.1/user/test/com/google/gwt/editor/EditorSuite.java Wed Nov 24 06:41:26 2010 +++ /releases/2.1/user/test/com/google/gwt/editor/EditorSuite.java Fri Dec 10 06:38:12 2010
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.editor;

-import com.google.gwt.autobean.client.AutoBeanTest;
-import com.google.gwt.autobean.server.AutoBeanJreTest;
 import com.google.gwt.editor.client.EditorErrorTest;
 import com.google.gwt.editor.client.SimpleBeanEditorTest;
 import com.google.gwt.editor.client.adapters.ListEditorWrapperTest;
@@ -34,8 +32,6 @@
   public static Test suite() {
     GWTTestSuite suite = new GWTTestSuite(
         "Test suite for core Editor functions");
-    suite.addTestSuite(AutoBeanJreTest.class);
-    suite.addTestSuite(AutoBeanTest.class);
     suite.addTestSuite(DelegateMapTest.class);
     suite.addTestSuite(EditorModelTest.class);
     suite.addTestSuite(EditorErrorTest.class);
=======================================
--- /releases/2.1/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java Thu Oct 14 11:27:30 2010 +++ /releases/2.1/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java Fri Dec 10 06:38:12 2010
@@ -92,6 +92,22 @@
   interface PersonEditorWithAddressEditorViewDriver extends
       SimpleBeanEditorDriver<Person, PersonEditorWithAddressEditorView> {
   }
+
+  /**
+ * A test for assigning the object associated with an editor to an immediate
+   * child editors.
+   */
+  class PersonEditorWithAliasedSubEditors implements Editor<Person> {
+    @Path("")
+    PersonEditor e1 = new PersonEditor();
+
+    @Path("")
+    PersonEditor e2 = new PersonEditor();
+  }
+
+  interface PersonEditorWithAliasedSubEditorsDriver extends
+      SimpleBeanEditorDriver<Person, PersonEditorWithAliasedSubEditors> {
+  }

   class PersonEditorWithCoAddressEditorView implements Editor<Person> {
     AddressCoEditorView addressEditor = new AddressCoEditorView();
@@ -264,6 +280,29 @@
     assertEquals("12345", person.address.street);
     assertEquals("David", person.manager.name);
   }
+
+  public void testAliasedEditors() {
+ PersonEditorWithAliasedSubEditors editor = new PersonEditorWithAliasedSubEditors(); + PersonEditorWithAliasedSubEditorsDriver driver = GWT.create(PersonEditorWithAliasedSubEditorsDriver.class);
+    driver.initialize(editor);
+    driver.edit(person);
+
+    assertEquals("Alice", editor.e1.name.getValue());
+    assertEquals("Alice", editor.e2.name.getValue());
+
+    /*
+     * Expecting that aliased editors will be editing disjoint sets of
+ * properties, but we want to at least have a predictable behavior if two
+     * editors are assigned to the same property.
+     */
+    editor.e1.name.setValue("Should not see this");
+    driver.flush();
+    assertEquals("Alice", person.getName());
+
+    editor.e2.name.setValue("Should see this");
+    driver.flush();
+    assertEquals("Should see this", person.getName());
+  }

   /**
    * Test the use of the IsEditor interface that allows a view object to
=======================================
--- /releases/2.1/user/test/com/google/gwt/editor/rebind/model/EditorModelTest.java Wed Nov 24 06:41:26 2010 +++ /releases/2.1/user/test/com/google/gwt/editor/rebind/model/EditorModelTest.java Fri Dec 10 06:38:12 2010
@@ -198,12 +198,12 @@
     assertFalse(fields[0].isDeclaredPathNested());
     assertEquals("", fields[0].getBeanOwnerExpression());
     assertEquals("true", fields[0].getBeanOwnerGuard("object"));
-    assertEquals("getName", fields[0].getGetterName());
+    assertEquals(".getName()", fields[0].getGetterExpression());
     assertEquals("address.street", fields[1].getPath());
     assertEquals(".getAddress()", fields[1].getBeanOwnerExpression());
     assertEquals("object.getAddress() != null",
         fields[1].getBeanOwnerGuard("object"));
-    assertEquals("getStreet", fields[1].getGetterName());
+    assertEquals(".getStreet()", fields[1].getGetterExpression());
     assertEquals("setStreet", fields[1].getSetterName());
     assertEquals("street", fields[1].getPropertyName());
     assertTrue(fields[1].isDeclaredPathNested());
@@ -403,6 +403,16 @@
     }
     testLogger.assertCorrectLogEntries();
   }
+
+  /**
+   * Verify that {...@code @Path("")} is valid.
+   */
+  public void testZeroLengthPath() throws UnableToCompleteException {
+    EditorModel m = new EditorModel(logger,
+ types.findType("t.PersonEditorWithAliasedSubEditorsDriver"), rfedType);
+    EditorData[] fields = m.getEditorData();
+    assertEquals(6, fields.length);
+  }

   private void checkPersonName(EditorData editorField) {
     assertNotNull(editorField);
@@ -411,7 +421,7 @@
     assertTrue(editorField.isLeafValueEditor());
     assertFalse(editorField.isDelegateRequired());
     assertFalse(editorField.isValueAwareEditor());
-    assertEquals("getName", editorField.getGetterName());
+    assertEquals(".getName()", editorField.getGetterExpression());
     assertEquals("setName", editorField.getSetterName());
   }

@@ -425,7 +435,7 @@
     assertTrue(editorField.isLeafValueEditor());
     assertFalse(editorField.isDelegateRequired());
     assertFalse(editorField.isValueAwareEditor());
-    assertEquals("getReadonly", editorField.getGetterName());
+    assertEquals(".getReadonly()", editorField.getGetterExpression());
     assertNull(editorField.getSetterName());
   }

@@ -614,6 +624,31 @@
         code.append("}");
         return code;
       }
+    }, new MockJavaResource("t.PersonEditorWithAliasedSubEditors") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuilder code = new StringBuilder();
+        code.append("package t;\n");
+        code.append("import " + Editor.class.getName() + ";\n");
+        code.append("import " + SimpleEditor.class.getName() + ";\n");
+ code.append("class PersonEditorWithAliasedSubEditors implements Editor<PersonProxy> {\n");
+        code.append("@Path(\"\") PersonEditor e1;\n");
+        code.append("@Path(\"\") PersonEditor e2;\n");
+        code.append("}");
+        return code;
+      }
+    }, new MockJavaResource("t.PersonEditorWithAliasedSubEditorsDriver") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuilder code = new StringBuilder();
+        code.append("package t;\n");
+        code.append("import " + RequestFactoryEditorDriver.class.getName()
+            + ";\n");
+ code.append("interface PersonEditorWithAliasedSubEditorsDriver extends" + + " RequestFactoryEditorDriver<PersonProxy, t.PersonEditorWithAliasedSubEditors> {\n");
+        code.append("}");
+        return code;
+      }
     }, new MockJavaResource("t.PersonEditorUsingMethods") {
       @Override
       protected CharSequence getContent() {
@@ -774,7 +809,7 @@
     }};

Set<Resource> toReturn = new HashSet<Resource>(Arrays.asList(javaFiles));
-    toReturn.addAll(Arrays.asList(new Resource[] {
+    toReturn.addAll(Arrays.asList(new Resource[]{
         new RealJavaResource(CompositeEditor.class),
         new RealJavaResource(Editor.class),
         new RealJavaResource(EditorError.class),

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

Reply via email to