Verify number of opening braces is the same as number of closing braces
authorJaroslav Tulach <jtulach@netbeans.org>
Thu, 02 Jul 2015 08:19:25 +0200
changeset 947014ef50234d9
parent 946 d9ecaeefb036
child 948 6db378e9aa7c
Verify number of opening braces is the same as number of closing braces
json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
json/src/test/java/net/java/html/json/Compile.java
     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 {