Need to propagate throws exceptions
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 12 Jul 2013 12:21:53 +0200
changeset 1960aa1301562e3
parent 195 4ea1a511023a
child 197 8001b95941ab
Need to propagate throws exceptions
boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java
boot/src/test/java/org/apidesign/html/boot/impl/JsClassLoaderBase.java
boot/src/test/java/org/apidesign/html/boot/impl/JsMethods.java
     1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java	Fri Jul 12 12:08:56 2013 +0200
     1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java	Fri Jul 12 12:21:53 2013 +0200
     1.3 @@ -240,7 +240,13 @@
     1.4                      source.append(" arg").append(++cnt);
     1.5                      sep = ", ";
     1.6                  }
     1.7 -                source.append(") {\n");
     1.8 +                source.append(")");
     1.9 +                sep = "\n throws ";
    1.10 +                for (TypeMirror thrwn : m.getThrownTypes()) {
    1.11 +                    source.append(sep).append(thrwn.toString());
    1.12 +                    sep = ",";
    1.13 +                }
    1.14 +                source.append(" {\n");
    1.15                  source.append("    ");
    1.16                  if (m.getReturnType().getKind() != TypeKind.VOID) {
    1.17                      source.append("return ");
     2.1 --- a/boot/src/test/java/org/apidesign/html/boot/impl/JsClassLoaderBase.java	Fri Jul 12 12:08:56 2013 +0200
     2.2 +++ b/boot/src/test/java/org/apidesign/html/boot/impl/JsClassLoaderBase.java	Fri Jul 12 12:21:53 2013 +0200
     2.3 @@ -171,4 +171,9 @@
     2.4          Method st = methodClass.getMethod("chooseLong", boolean.class, boolean.class, long.class, long.class);
     2.5          assertEquals(st.invoke(null, true, true, 10, 20), 30L, "Take both values");
     2.6      }
     2.7 +    
     2.8 +    @Test public void recordError() throws Throwable {
     2.9 +        Method st = methodClass.getMethod("recordError", Object.class);
    2.10 +        assertEquals(st.invoke(methodClass.newInstance(), "Hello"), "Hello", "The same parameter returned");
    2.11 +    }
    2.12  }
    2.13 \ No newline at end of file
     3.1 --- a/boot/src/test/java/org/apidesign/html/boot/impl/JsMethods.java	Fri Jul 12 12:08:56 2013 +0200
     3.2 +++ b/boot/src/test/java/org/apidesign/html/boot/impl/JsMethods.java	Fri Jul 12 12:21:53 2013 +0200
     3.3 @@ -30,6 +30,8 @@
     3.4   */
     3.5  @JavaScriptResource("jsmethods.js")
     3.6  public class JsMethods {
     3.7 +    private Object value;
     3.8 +    
     3.9      @JavaScriptBody(args = {}, body = "return 42;")
    3.10      public static Object fortyTwo() {
    3.11          return -42;
    3.12 @@ -88,4 +90,18 @@
    3.13          + "return l;\n"
    3.14      )
    3.15      public static native long chooseLong(boolean useA, boolean useB, long a, long b);
    3.16 +    
    3.17 +    protected void onError(Object o) throws Exception {
    3.18 +        value = o;
    3.19 +    }
    3.20 +    
    3.21 +    Object getError() {
    3.22 +        return value;
    3.23 +    }
    3.24 +    
    3.25 +    @JavaScriptBody(args = { "err" }, javacall = true, body = 
    3.26 +        "this.@org.apidesign.html.boot.impl.JsMethods::onError(Ljava/lang/Object;)(err);"
    3.27 +      + "return this.@org.apidesign.html.boot.impl.JsMethods::getError()();"
    3.28 +    )
    3.29 +    public native Object recordError(Object err);
    3.30  }