浏览代码

Simplify Json generated classes reusing common code

tags/gwtquery-project-1.5-beta1
Manolo Carrasco 9 年前
父节点
当前提交
1105ed0acb

+ 14
- 0
gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsonBuilderBase.java 查看文件

@@ -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());

+ 3
- 12
gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsonBuilderGenerator.java 查看文件

@@ -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("}");

+ 5
- 0
gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java 查看文件

@@ -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());

正在加载...
取消
保存