1.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Proto.java Tue Dec 24 08:21:48 2013 +0100
1.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Proto.java Tue Dec 24 13:43:31 2013 +0100
1.3 @@ -217,6 +217,7 @@
1.4 public abstract Model cloneTo(Object model, BrwsrCtx ctx);
1.5 public abstract Model read(BrwsrCtx c, Object json);
1.6 public abstract void onChange(Model model, int index);
1.7 + public abstract Proto protoFor(Object object);
1.8
1.9 //
1.10 // Various support methods the generated classes use
1.11 @@ -346,6 +347,6 @@
1.12 }
1.13 return type.cast(val);
1.14 }
1.15 -
1.16 +
1.17 }
1.18 }
2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSON.java Tue Dec 24 08:21:48 2013 +0100
2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSON.java Tue Dec 24 13:43:31 2013 +0100
2.3 @@ -339,7 +339,7 @@
2.4 return findType(clazz) != null;
2.5 }
2.6
2.7 - private static Proto.Type<?> findType(Class<?> clazz) {
2.8 + static Proto.Type<?> findType(Class<?> clazz) {
2.9 for (int i = 0; i < 2; i++) {
2.10 Proto.Type<?> from = modelTypes.get(clazz);
2.11 if (from == null) {
3.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Tue Dec 24 08:21:48 2013 +0100
3.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Tue Dec 24 13:43:31 2013 +0100
3.3 @@ -351,6 +351,9 @@
3.4 w.append(" }\n");
3.5 w.append(" throw new UnsupportedOperationException();\n");
3.6 w.append(" }\n");
3.7 + w.append(" @Override public org.apidesign.html.json.spi.Proto protoFor(Object obj) {\n");
3.8 + w.append(" return ((" + className + ")obj).proto;");
3.9 + w.append(" }\n");
3.10 w.append(" @Override public void onChange(" + className + " model, int type) {\n");
3.11 w.append(" switch (type) {\n");
3.12 {
3.13 @@ -472,10 +475,6 @@
3.14 w.write(" }\n");
3.15 w.write(" public boolean equals(Object o) {\n");
3.16 w.write(" if (o == this) return true;\n");
3.17 - w.write(" if (o instanceof org.netbeans.html.json.impl.WrapperObject) {\n");
3.18 - w.write(" ((org.netbeans.html.json.impl.WrapperObject)o).setRealObject(proto.initBindings().koData());\n");
3.19 - w.write(" return false;\n");
3.20 - w.write(" }\n");
3.21 w.write(" if (!(o instanceof " + className + ")) return false;\n");
3.22 w.write(" " + className + " p = (" + className + ")o;\n");
3.23 for (Prprt p : props) {
4.1 --- a/json/src/main/java/org/netbeans/html/json/impl/WrapperObject.java Tue Dec 24 08:21:48 2013 +0100
4.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/WrapperObject.java Tue Dec 24 13:43:31 2013 +0100
4.3 @@ -43,22 +43,16 @@
4.4 package org.netbeans.html.json.impl;
4.5
4.6 import java.util.Collection;
4.7 -import org.netbeans.html.json.impl.PropertyBindingAccessor.PBData;
4.8 +import org.apidesign.html.json.spi.Proto;
4.9
4.10 /** A way to extract real object from a model classes.
4.11 *
4.12 * @author Jaroslav Tulach <jtulach@netbeans.org>
4.13 */
4.14 public final class WrapperObject {
4.15 - private Object ko;
4.16 -
4.17 private WrapperObject() {
4.18 }
4.19
4.20 - public void setRealObject(Object ko) {
4.21 - this.ko = ko;
4.22 - }
4.23 -
4.24 public static Object find(Object object) {
4.25 return find(object, null);
4.26 }
4.27 @@ -74,9 +68,16 @@
4.28 if (object instanceof Collection) {
4.29 return JSONList.koData((Collection<?>)object, model);
4.30 }
4.31 -
4.32 - WrapperObject ro = new WrapperObject();
4.33 - object.equals(ro);
4.34 - return ro.ko;
4.35 +
4.36 + Proto.Type<?> type = JSON.findType(object.getClass());
4.37 + if (type == null) {
4.38 + return null;
4.39 + }
4.40 + final Proto proto = type.protoFor(object);
4.41 + if (proto == null) {
4.42 + return null;
4.43 + }
4.44 + final Bindings b = proto.initBindings();
4.45 + return b == null ? null : b.koData();
4.46 }
4.47 }