Rather than using 5 strings next to each other, encapsulate the value into a struct
1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Tue Jan 28 09:03:10 2014 +0100
1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Tue Jan 28 14:36:47 2014 +0100
1.3 @@ -205,7 +205,7 @@
1.4 try {
1.5 StringWriter body = new StringWriter();
1.6 StringBuilder onReceiveType = new StringBuilder();
1.7 - List<String> propsGetSet = new ArrayList<String>();
1.8 + List<PropInfo> propsGetSet = new ArrayList<PropInfo>();
1.9 List<String> functions = new ArrayList<String>();
1.10 Map<String, Collection<String>> propsDeps = new HashMap<String, Collection<String>>();
1.11 Map<String, Collection<String>> functionDeps = new HashMap<String, Collection<String>>();
1.12 @@ -235,7 +235,10 @@
1.13 w.append("package " + pkg + ";\n");
1.14 w.append("import net.java.html.json.*;\n");
1.15 w.append("public final ");
1.16 - generateClassBody(w, className, body, e, props, functionDeps, propsDeps, propsGetSet, functions, onReceiveType);
1.17 + generateClassBody(w, className, body, e, props,
1.18 + functionDeps, propsDeps, propsGetSet,
1.19 + functions, onReceiveType
1.20 + );
1.21 } finally {
1.22 w.close();
1.23 }
1.24 @@ -246,7 +249,15 @@
1.25 return ok;
1.26 }
1.27
1.28 - private void generateClassBody(Writer w, String className, StringWriter body, Element e, Prprt[] props, Map<String, Collection<String>> functionDeps, Map<String, Collection<String>> propsDeps, List<String> propsGetSet, List<String> functions, StringBuilder onReceiveType) throws IOException {
1.29 + private void generateClassBody(
1.30 + Writer w, String className, StringWriter body,
1.31 + Element e, Prprt[] props,
1.32 + Map<String, Collection<String>> functionDeps,
1.33 + Map<String, Collection<String>> propsDeps,
1.34 + List<PropInfo> propsGetSet,
1.35 + List<String> functions,
1.36 + StringBuilder onReceiveType
1.37 + ) throws IOException {
1.38 w.append("class ").append(className).append(" implements Cloneable {\n");
1.39 w.append(" private static final Html4JavaType TYPE = new Html4JavaType();\n");
1.40 w.append(" private final org.apidesign.html.json.spi.Proto proto;\n");
1.41 @@ -336,12 +347,12 @@
1.42 }
1.43 w.append(" private static class Html4JavaType extends org.apidesign.html.json.spi.Proto.Type<").append(className).append("> {\n");
1.44 w.append(" private Html4JavaType() {\n super(").append(className).append(".class, ").
1.45 - append(inPckName(e)).append(".class, " + (propsGetSet.size() / 5) + ", "
1.46 + append(inPckName(e)).append(".class, " + (propsGetSet.size()) + ", "
1.47 + (functions.size() / 2) + ");\n");
1.48 {
1.49 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.50 - w.append(" registerProperty(\"").append(propsGetSet.get(i)).append("\", ");
1.51 - w.append((i / 5) + ", " + (propsGetSet.get(i + 2) == null) + ");\n");
1.52 + for (int i = 0; i < propsGetSet.size(); i++) {
1.53 + w.append(" registerProperty(\"").append(propsGetSet.get(i).p0).append("\", ");
1.54 + w.append(i + ", " + (propsGetSet.get(i).p2 == null) + ");\n");
1.55 }
1.56 }
1.57 {
1.58 @@ -353,25 +364,25 @@
1.59 w.append(" }\n");
1.60 w.append(" @Override public void setValue(" + className + " data, int type, Object value) {\n");
1.61 w.append(" switch (type) {\n");
1.62 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.63 - final String set = propsGetSet.get(i + 2);
1.64 - String tn = propsGetSet.get(i + 4);
1.65 + for (int i = 0; i < propsGetSet.size(); i++) {
1.66 + final String set = propsGetSet.get(i).p2;
1.67 + String tn = propsGetSet.get(i).p4;
1.68 String btn = findBoxedType(tn);
1.69 if (btn != null) {
1.70 tn = btn;
1.71 }
1.72 if (set != null) {
1.73 - w.append(" case " + (i / 5) + ": data." + strip(set) + "(TYPE.extractValue(" + tn + ".class, value)); return;\n");
1.74 + w.append(" case " + i + ": data." + strip(set) + "(TYPE.extractValue(" + tn + ".class, value)); return;\n");
1.75 }
1.76 }
1.77 w.append(" }\n");
1.78 w.append(" }\n");
1.79 w.append(" @Override public Object getValue(" + className + " data, int type) {\n");
1.80 w.append(" switch (type) {\n");
1.81 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.82 - final String get = propsGetSet.get(i + 1);
1.83 + for (int i = 0; i < propsGetSet.size(); i++) {
1.84 + final String get = propsGetSet.get(i).p1;
1.85 if (get != null) {
1.86 - w.append(" case " + (i / 5) + ": return data." + strip(get) + "();\n");
1.87 + w.append(" case " + i + ": return data." + strip(get) + "();\n");
1.88 }
1.89 }
1.90 w.append(" }\n");
1.91 @@ -414,8 +425,8 @@
1.92 w.append(" private ").append(className).append("(net.java.html.BrwsrCtx c, Object json) {\n");
1.93 w.append(" this(c);\n");
1.94 int values = 0;
1.95 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.96 - Prprt p = findPrprt(props, propsGetSet.get(i));
1.97 + for (int i = 0; i < propsGetSet.size(); i++) {
1.98 + Prprt p = findPrprt(props, propsGetSet.get(i).p0);
1.99 if (p == null) {
1.100 continue;
1.101 }
1.102 @@ -423,16 +434,16 @@
1.103 }
1.104 w.append(" Object[] ret = new Object[" + values + "];\n");
1.105 w.append(" proto.extract(json, new String[] {\n");
1.106 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.107 - Prprt p = findPrprt(props, propsGetSet.get(i));
1.108 + for (int i = 0; i < propsGetSet.size(); i++) {
1.109 + Prprt p = findPrprt(props, propsGetSet.get(i).p0);
1.110 if (p == null) {
1.111 continue;
1.112 }
1.113 - w.append(" \"").append(propsGetSet.get(i)).append("\",\n");
1.114 + w.append(" \"").append(propsGetSet.get(i).p0).append("\",\n");
1.115 }
1.116 w.append(" }, ret);\n");
1.117 - for (int i = 0, cnt = 0, prop = 0; i < propsGetSet.size(); i += 5) {
1.118 - final String pn = propsGetSet.get(i);
1.119 + for (int i = 0, cnt = 0, prop = 0; i < propsGetSet.size(); i++) {
1.120 + final String pn = propsGetSet.get(i).p0;
1.121 Prprt p = findPrprt(props, pn);
1.122 if (p == null) {
1.123 continue;
1.124 @@ -541,7 +552,7 @@
1.125 try {
1.126 StringWriter body = new StringWriter();
1.127 StringBuilder onReceiveType = new StringBuilder();
1.128 - List<String> propsGetSet = new ArrayList<String>();
1.129 + List<PropInfo> propsGetSet = new ArrayList<PropInfo>();
1.130 List<String> functions = new ArrayList<String>();
1.131 Map<String, Collection<String>> propsDeps = new HashMap<String, Collection<String>>();
1.132 Map<String, Collection<String>> functionDeps = new HashMap<String, Collection<String>>();
1.133 @@ -687,12 +698,12 @@
1.134 }
1.135 w.append(" private static class Html4JavaType extends org.apidesign.html.json.spi.Proto.Type<").append(className).append("> {\n");
1.136 w.append(" private Html4JavaType() {\n super(").append(className).append(".class, ").
1.137 - append(inPckName(e)).append(".class, " + (propsGetSet.size() / 5) + ", "
1.138 + append(inPckName(e)).append(".class, " + (propsGetSet.size()) + ", "
1.139 + (functions.size() / 2) + ");\n");
1.140 {
1.141 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.142 - w.append(" registerProperty(\"").append(propsGetSet.get(i)).append("\", ");
1.143 - w.append((i / 5) + ", " + (propsGetSet.get(i + 2) == null) + ");\n");
1.144 + for (int i = 0; i < propsGetSet.size(); i++) {
1.145 + w.append(" registerProperty(\"").append(propsGetSet.get(i).p0).append("\", ");
1.146 + w.append(i + ", " + (propsGetSet.get(i).p2 == null) + ");\n");
1.147 }
1.148 }
1.149 {
1.150 @@ -704,25 +715,25 @@
1.151 w.append(" }\n");
1.152 w.append(" @Override public void setValue(" + className + " data, int type, Object value) {\n");
1.153 w.append(" switch (type) {\n");
1.154 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.155 - final String set = propsGetSet.get(i + 2);
1.156 - String tn = propsGetSet.get(i + 4);
1.157 + for (int i = 0; i < propsGetSet.size(); i++) {
1.158 + final String set = propsGetSet.get(i).p2;
1.159 + String tn = propsGetSet.get(i).p4;
1.160 String btn = findBoxedType(tn);
1.161 if (btn != null) {
1.162 tn = btn;
1.163 }
1.164 if (set != null) {
1.165 - w.append(" case " + (i / 5) + ": data." + strip(set) + "(TYPE.extractValue(" + tn + ".class, value)); return;\n");
1.166 + w.append(" case " + i + ": data." + strip(set) + "(TYPE.extractValue(" + tn + ".class, value)); return;\n");
1.167 }
1.168 }
1.169 w.append(" }\n");
1.170 w.append(" }\n");
1.171 w.append(" @Override public Object getValue(" + className + " data, int type) {\n");
1.172 w.append(" switch (type) {\n");
1.173 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.174 - final String get = propsGetSet.get(i + 1);
1.175 + for (int i = 0; i < propsGetSet.size(); i++) {
1.176 + final String get = propsGetSet.get(i).p1;
1.177 if (get != null) {
1.178 - w.append(" case " + (i / 5) + ": return data." + strip(get) + "();\n");
1.179 + w.append(" case " + i + ": return data." + strip(get) + "();\n");
1.180 }
1.181 }
1.182 w.append(" }\n");
1.183 @@ -766,8 +777,8 @@
1.184 w.append(" }\n");
1.185 w.append(" private final Object readUnion(Object json) {\n");
1.186 int values = 1;
1.187 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.188 - Prprt p = findPrprt(props, propsGetSet.get(i));
1.189 + for (int i = 0; i < propsGetSet.size(); i++) {
1.190 + Prprt p = findPrprt(props, propsGetSet.get(i).p0);
1.191 if (p == null) {
1.192 continue;
1.193 }
1.194 @@ -776,12 +787,12 @@
1.195 w.append(" Object[] ret = new Object[" + values + "];\n");
1.196 w.append(" proto.extract(json, new String[] {\n");
1.197 w.append(" \"").append(e.getSimpleName()).append("\",\n");
1.198 - for (int i = 0; i < propsGetSet.size(); i += 5) {
1.199 - Prprt p = findPrprt(props, propsGetSet.get(i));
1.200 + for (int i = 0; i < propsGetSet.size(); i++) {
1.201 + Prprt p = findPrprt(props, propsGetSet.get(i).p0);
1.202 if (p == null) {
1.203 continue;
1.204 }
1.205 - w.append(" \"").append(propsGetSet.get(i)).append("\",\n");
1.206 + w.append(" \"").append(propsGetSet.get(i).p0).append("\",\n");
1.207 }
1.208 w.append(" }, ret);\n");
1.209 w.append(" Object union;\n");
1.210 @@ -796,8 +807,8 @@
1.211 }
1.212 w.append(" default: throw new IllegalStateException(ret[0].toString());\n");
1.213 w.append(" }\n" );
1.214 - for (int i = 0, cnt = 1, prop = 0; i < propsGetSet.size(); i += 5) {
1.215 - final String pn = propsGetSet.get(i);
1.216 + for (int i = 0, cnt = 1, prop = 0; i < propsGetSet.size(); i++) {
1.217 + final String pn = propsGetSet.get(i).p0;
1.218 Prprt p = findPrprt(props, pn);
1.219 if (p == null) {
1.220 continue;
1.221 @@ -947,7 +958,7 @@
1.222
1.223 StringWriter body = new StringWriter();
1.224 StringBuilder onReceiveType = new StringBuilder();
1.225 - List<String> propsGetSet = new ArrayList<String>();
1.226 + List<PropInfo> propsGetSet = new ArrayList<PropInfo>();
1.227 List<String> functions = new ArrayList<String>();
1.228 Map<String, Collection<String>> propsDeps = new HashMap<String, Collection<String>>();
1.229 Map<String, Collection<String>> functionDeps = new HashMap<String, Collection<String>>();
1.230 @@ -982,7 +993,7 @@
1.231 private boolean generateProperties(
1.232 Element where,
1.233 Writer w, String className, Prprt[] properties,
1.234 - Collection<String> props,
1.235 + Collection<PropInfo> props,
1.236 Map<String,Collection<String>> deps,
1.237 Map<String,Collection<String>> functionDeps
1.238 ) throws IOException {
1.239 @@ -1028,19 +1039,21 @@
1.240 }
1.241 w.write(" }\n");
1.242 }
1.243 -
1.244 - props.add(p.name());
1.245 - props.add(gs[2]);
1.246 - props.add(gs[3]);
1.247 - props.add(gs[0]);
1.248 - props.add(castTo);
1.249 +
1.250 + props.add(new PropInfo(
1.251 + p.name(),
1.252 + gs[2],
1.253 + gs[3],
1.254 + gs[0],
1.255 + castTo
1.256 + ));
1.257 }
1.258 return ok;
1.259 }
1.260
1.261 private boolean generateComputedProperties(
1.262 Writer w, Prprt[] fixedProps,
1.263 - Collection<? extends Element> arr, Collection<String> props,
1.264 + Collection<? extends Element> arr, Collection<PropInfo> props,
1.265 Map<String,Collection<String>> deps
1.266 ) throws IOException {
1.267 boolean ok = true;
1.268 @@ -1128,11 +1141,13 @@
1.269 w.write(" }\n");
1.270 w.write(" }\n");
1.271
1.272 - props.add(e.getSimpleName().toString());
1.273 - props.add(gs[2]);
1.274 - props.add(null);
1.275 - props.add(gs[0]);
1.276 - props.add(tn);
1.277 + props.add(new PropInfo(
1.278 + e.getSimpleName().toString(),
1.279 + gs[2],
1.280 + null,
1.281 + gs[0],
1.282 + tn
1.283 + ));
1.284 }
1.285
1.286 return ok;
1.287 @@ -2309,5 +2324,22 @@
1.288 error(err, errElem);
1.289 return false;
1.290 }
1.291 -
1.292 +
1.293 + private static final class PropInfo {
1.294 + final String p0;
1.295 + final String p1;
1.296 + final String p2;
1.297 + final String p3;
1.298 + final String p4;
1.299 +
1.300 + PropInfo(
1.301 + String p1, String p2, Object p3, String p4, String p5
1.302 + ) {
1.303 + this.p0 = p1;
1.304 + this.p1 = p2;
1.305 + this.p2 = p3 == null ? null : p3.toString();
1.306 + this.p3 = p4;
1.307 + this.p4 = p5;
1.308 + }
1.309 + }
1.310 }