Needs to mangle the parameters to convert / to _
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 12 Jul 2013 16:06:38 +0200
changeset 1248a3eb8b0dfb81
parent 1247 48de24658490
child 1249 cdaeea7becf2
Needs to mangle the parameters to convert / to _
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jul 12 16:05:33 2013 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jul 12 16:06:38 2013 +0200
     1.3 @@ -1742,12 +1742,14 @@
     1.4          }
     1.5          StringBuilder sb = new StringBuilder();
     1.6          final String rfqn = replace(fqn);
     1.7 -        sb.append(rfqn).append("$").append(method).
     1.8 -            append('$').append(params).append("__Ljava_lang_Object_2");
     1.9 +        final String rm = replace(method);
    1.10 +        final String rp = replace(params);
    1.11 +        sb.append(rfqn).append("$").append(rm).
    1.12 +            append('$').append(rp).append("__Ljava_lang_Object_2");
    1.13          if (!isStatic) {
    1.14              sb.append('L').append(rfqn).append("_2");
    1.15          }
    1.16 -        sb.append(params);
    1.17 +        sb.append(rp);
    1.18          return sb.toString();
    1.19      }
    1.20  
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java	Fri Jul 12 16:05:33 2013 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java	Fri Jul 12 16:06:38 2013 +0200
     2.3 @@ -26,6 +26,9 @@
     2.4   */
     2.5  @JavaScriptResource("htmlannotations.js")
     2.6  public class HtmlAnnotations {
     2.7 +    private Object callback;
     2.8 +    
     2.9 +    
    2.10      @JavaScriptBody(args = {}, body = "return 42;")
    2.11      public static int fourtyTwo() {
    2.12          return -1;
    2.13 @@ -59,6 +62,14 @@
    2.14          return l;
    2.15      }
    2.16      
    2.17 +    protected void onError(Object obj) throws Exception {
    2.18 +        callback = obj;
    2.19 +    }
    2.20 +    
    2.21 +    Object getError() {
    2.22 +        return callback;
    2.23 +    }
    2.24 +    
    2.25      public static Object create() {
    2.26          return new HtmlAnnotations();
    2.27      }
    2.28 @@ -66,4 +77,10 @@
    2.29          "return impl.@org.apidesign.vm4brwsr.HtmlAnnotations::chooseLong(ZZJJ)(true, false, a, b);"
    2.30      )
    2.31      public static native long first(Object impl, long a, long b);
    2.32 +    
    2.33 +    @JavaScriptBody(args = { "impl", "d" }, javacall = true, body = 
    2.34 +        "impl.@org.apidesign.vm4brwsr.HtmlAnnotations::onError(Ljava/lang/Object;)(d);" +
    2.35 +        "return impl.@org.apidesign.vm4brwsr.HtmlAnnotations::getError()();"
    2.36 +    )
    2.37 +    public static native Double onError(Object impl, Double d);
    2.38  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java	Fri Jul 12 16:05:33 2013 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java	Fri Jul 12 16:06:38 2013 +0200
     3.3 @@ -64,6 +64,15 @@
     3.4              Double.valueOf(42), instance, 42, 31
     3.5          );
     3.6      }
     3.7 +
     3.8 +    @Test public void callbackWithObjectParamsAndReturnType() throws Exception {
     3.9 +        Object instance = code.execCode("Get an HtmlAnnotations instance", HtmlAnnotations.class, "create__Ljava_lang_Object_2", null);
    3.10 +        assertNotNull(instance, "Instance created");
    3.11 +        assertExec("called back and forth", HtmlAnnotations.class, 
    3.12 +            "onError__Ljava_lang_Double_2Ljava_lang_Object_2Ljava_lang_Double_2",
    3.13 +            Double.valueOf(42), instance, 42
    3.14 +        );
    3.15 +    }
    3.16      
    3.17      private static TestVM code;
    3.18