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