1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Wed Jul 01 23:21:56 2015 +0200
1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Thu Jul 02 08:19:25 2015 +0200
1.3 @@ -1033,9 +1033,20 @@
1.4 Element clazz, StringWriter body, String className,
1.5 List<? extends Element> enclosedElements, StringBuilder inType
1.6 ) {
1.7 + boolean ret = generateReceiveImpl(clazz, body, className, enclosedElements, inType);
1.8 + if (!ret) {
1.9 + inType.setLength(0);
1.10 + }
1.11 + return ret;
1.12 + }
1.13 + private boolean generateReceiveImpl(
1.14 + Element clazz, StringWriter body, String className,
1.15 + List<? extends Element> enclosedElements, StringBuilder inType
1.16 + ) {
1.17 inType.append(" @Override public void onMessage(").append(className).append(" model, int index, int type, Object data, Object[] params) {\n");
1.18 inType.append(" switch (index) {\n");
1.19 int index = 0;
1.20 + boolean ok = true;
1.21 for (Element m : enclosedElements) {
1.22 if (m.getKind() != ElementKind.METHOD) {
1.23 continue;
1.24 @@ -1072,6 +1083,7 @@
1.25 if (e.getParameters().size() < 2) {
1.26 error("@OnReceive method needs at least two parameters", e);
1.27 }
1.28 + final boolean isWebSocket = "WebSocket".equals(onR.method());
1.29 int expectsList = 0;
1.30 List<String> args = new ArrayList<String>();
1.31 List<String> params = new ArrayList<String>();
1.32 @@ -1127,7 +1139,6 @@
1.33 }
1.34 }
1.35 String n = e.getSimpleName().toString();
1.36 - final boolean isWebSocket = "WebSocket".equals(onR.method());
1.37 if (isWebSocket) {
1.38 body.append(" /** Performs WebSocket communication. Call with <code>null</code> data parameter\n");
1.39 body.append(" * to open the connection (even if not required). Call with non-null data to\n");
1.40 @@ -1204,7 +1215,7 @@
1.41 body.append(" private Object ws_" + e.getSimpleName() + ";\n");
1.42 } else {
1.43 if (generateJSONReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList != 0, modelClass, n, args, params, urlBefore, jsonpVarName, urlAfter, dataMirror, headers)) {
1.44 - return false;
1.45 + ok = false;
1.46 }
1.47 body.append(" }\n");
1.48 }
1.49 @@ -1212,10 +1223,11 @@
1.50 inType.append(" }\n");
1.51 inType.append(" throw new UnsupportedOperationException(\"index: \" + index + \" type: \" + type);\n");
1.52 inType.append(" }\n");
1.53 - return true;
1.54 + return ok;
1.55 }
1.56
1.57 private boolean generateJSONReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, List<String> params, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror, StringBuilder headers) {
1.58 + boolean error = false;
1.59 body.append(
1.60 " case " + index + ": {\n" +
1.61 " if (type == 2) { /* on error */\n" +
1.62 @@ -1226,9 +1238,7 @@
1.63 " ex.printStackTrace();\n"
1.64 );
1.65 } else {
1.66 - if (!findOnError(e, ((TypeElement)clazz), onR.onError(), className)) {
1.67 - return true;
1.68 - }
1.69 + error = !findOnError(e, ((TypeElement)clazz), onR.onError(), className);
1.70 body.append(" ").append(clazz.getSimpleName()).append(".").append(onR.onError()).append("(");
1.71 body.append("model, ex);\n");
1.72 }
1.73 @@ -1286,7 +1296,7 @@
1.74 method.append(", ").append(a);
1.75 }
1.76 method.append(");\n");
1.77 - return false;
1.78 + return error;
1.79 }
1.80
1.81 private boolean generateWSReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, List<String> params, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror, StringBuilder headers) {
2.1 --- a/json/src/test/java/net/java/html/json/Compile.java Wed Jul 01 23:21:56 2015 +0200
2.2 +++ b/json/src/test/java/net/java/html/json/Compile.java Thu Jul 02 08:19:25 2015 +0200
2.3 @@ -206,7 +206,30 @@
2.4 super(uri, kind);
2.5 this.n = n;
2.6 }
2.7 - private final ByteArrayOutputStream data = new ByteArrayOutputStream();
2.8 + private final ByteArrayOutputStream data = new ByteArrayOutputStream() {
2.9 +
2.10 + @Override
2.11 + public void close() throws IOException {
2.12 + super.close();
2.13 +
2.14 + int opening = count(toString(), '{');
2.15 + int closing = count(toString(), '}');
2.16 +
2.17 + assertEquals(opening, closing, "There should be pair number of { and } in\n" + toString());
2.18 + }
2.19 + };
2.20 +
2.21 + int count(String where, char what) {
2.22 + int at = -1;
2.23 + int cnt = 0;
2.24 + for (;;) {
2.25 + at = where.indexOf(what, at + 1);
2.26 + if (at == -1) {
2.27 + return cnt;
2.28 + }
2.29 + cnt++;
2.30 + }
2.31 + }
2.32
2.33 @Override
2.34 public OutputStream openOutputStream() throws IOException {