]> source.dussan.org Git - gwtquery.git/commitdiff
Simplify Json generated classes reusing common code
authorManolo Carrasco <manolo@apache.org>
Thu, 26 Feb 2015 09:04:47 +0000 (10:04 +0100)
committerManolo Carrasco <manolo@apache.org>
Thu, 26 Feb 2015 09:04:47 +0000 (10:04 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsonBuilderBase.java
gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsonBuilderGenerator.java
gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java

index f0c469310a472a0e399f42abff887815f21f731b..996f245c5aa53e69d44ecf5bb584f5404b80a6cd 100644 (file)
@@ -17,6 +17,8 @@ package com.google.gwt.query.client.builders;
 
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArray;
+import com.google.gwt.core.client.JsArrayMixed;
+import com.google.gwt.query.client.GQ;
 import com.google.gwt.query.client.IsProperties;
 import com.google.gwt.query.client.Properties;
 import com.google.gwt.query.client.js.JsCache;
@@ -107,6 +109,18 @@ public abstract class JsonBuilderBase<J extends JsonBuilderBase<?>> implements J
     return r;
   }
 
+  protected final <T extends JsonBuilder> T[] getIsPropertiesArrayBase(JsArrayMixed js, T[] r, Class<T> clazz) {
+    JsObjectArray<?> a1 = js.cast();
+    for (int i = 0; i < r.length; i++) {
+      r[i] = getIsPropertiesBase(a1.get(i), clazz);
+    }
+    return r;
+  }
+
+  protected final <T extends JsonBuilder> T getIsPropertiesBase(Object o, Class<T> clazz) {
+    return GQ.create(clazz).load(o);
+  }
+
   protected Properties getPropertiesBase(String n) {
     if (p.getJavaScriptObject(n) == null) {
       p.set(n, Properties.create());
index 08e40c244d9a28b7c0bd704c96bc15c5d38df4ea..e30b7588b1b9a24c7d8882ac343b17534cfbc467 100644 (file)
@@ -183,8 +183,7 @@ public class JsonBuilderGenerator extends Generator {
         sw.println("return p.getStr(\"" + name + "\");");
       } else if (isTypeAssignableTo(method.getReturnType(), jsonBuilderType)) {
         String q = method.getReturnType().getQualifiedSourceName();
-        sw.println("return " + "((" + q + ")GWT.create(" + q + ".class))"
-            + ".load(getPropertiesBase(\"" + name + "\"));");
+        sw.println("return " + "getIsPropertiesBase(getPropertiesBase(\"" + name + "\")," + q + ".class);");
       } else if (isTypeAssignableTo(method.getReturnType(), settingsType)) {
         String q = method.getReturnType().getQualifiedSourceName();
         sw.println("return " + "((" + q + ")getPropertiesBase(\"" + name + "\"));");
@@ -203,16 +202,7 @@ public class JsonBuilderGenerator extends Generator {
         sw.println("int l = a == null ? 0 : a.length();");
         String ret;
         if (buildType) {
-          sw.println(t + "[] r = new " + t + "[l];");
-          sw.println("JsObjectArray<?> a1 = p.getArray(\"" + name
-              + "\").cast();");
-          sw.println("int l1 = r.length;");
-          sw.println("for (int i = 0 ; i < l1 ; i++) {");
-          sw.println("  Object w = a1.get(i);");
-          sw.println("  " + t + " instance = GWT.create(" + t + ".class);");
-          sw.println("  r[i] = instance.load(w);");
-          sw.println("}");
-          ret = "r";
+          ret = "getIsPropertiesArrayBase(a, new " + t + "[l], " + t + ".class)";
         } else {
           ret = "getArrayBase(\"" + name + "\", new " + t + "[l], " + t + ".class)";
         }
@@ -326,6 +316,7 @@ public class JsonBuilderGenerator extends Generator {
         types.add(t);
       }
     }
+    sw.println("GQuery.console.error(\"GQ.create: not registered class :\" + clz);");
     sw.println("return null;");
     sw.outdent();
     sw.println("}");
index 50123b80566797062c33a084243b86419af4a125..01b93bfd96f0a35c549056c96efb9f6d7acf205d 100644 (file)
@@ -81,6 +81,8 @@ public class DataBindingTestJre extends GWTTestCase {
     Boolean getZ();
     String[] getT();
     JsonExample setT(String[] strings);
+    Item[] getIt();
+    JsonExample setIt(Item[] items);
     JsonExample setZ(Boolean b);
     JsonExample setD(long l);
     List<Item> getItems();
@@ -139,6 +141,9 @@ public class DataBindingTestJre extends GWTTestCase {
     Item i2 = GQ.create(Item.class);
     i2.setDate(new Date(3000));
     Item[] items = new Item[]{i1, i2};
+    c.setIt(items);
+    assertEquals(2000l, c.getIt()[0].getDate().getTime());
+    assertEquals(3000l, c.getIt()[1].getDate().getTime());
     c.setItems(Arrays.asList(items));
     assertEquals(2000l, c.getItems().get(0).getDate().getTime());
     assertEquals(3000l, c.getItems().get(1).getDate().getTime());