Make sure callback with parameters works. Plus get ready to usage of $ sign in $JsCallbacks$ naming scheme.
1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jul 11 22:36:01 2013 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jul 12 11:07:58 2013 +0200
1.3 @@ -1742,7 +1742,8 @@
1.4 }
1.5 StringBuilder sb = new StringBuilder();
1.6 final String rfqn = replace(fqn);
1.7 - sb.append(rfqn).append("__").append(method).append("____Ljava_lang_Object_2");
1.8 + sb.append(rfqn).append("$").append(method).
1.9 + append('$').append(params).append("__Ljava_lang_Object_2");
1.10 if (!isStatic) {
1.11 sb.append('L').append(rfqn).append("_2");
1.12 }
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java Thu Jul 11 22:36:01 2013 +0200
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java Fri Jul 12 11:07:58 2013 +0200
2.3 @@ -49,5 +49,21 @@
2.4 private static native void callback(Runnable r);
2.5
2.6 @JavaScriptBody(args = { }, javacall = true, body = "return @org.apidesign.vm4brwsr.HtmlAnnotations::callback()();")
2.7 - private static native int staticCallback();
2.8 + public static native int staticCallback();
2.9 +
2.10 +
2.11 + protected long chooseLong(boolean takeFirst, boolean takeSecond, long first, long second) {
2.12 + long l = 0;
2.13 + if (takeFirst) l += first;
2.14 + if (takeSecond) l += second;
2.15 + return l;
2.16 + }
2.17 +
2.18 + public static Object create() {
2.19 + return new HtmlAnnotations();
2.20 + }
2.21 + @JavaScriptBody(args = { "impl", "a", "b" }, javacall = true, body =
2.22 + "return impl.@org.apidesign.vm4brwsr.HtmlAnnotations::chooseLong(ZZJJ)(true, false, a, b);"
2.23 + )
2.24 + public static native long first(Object impl, long a, long b);
2.25 }
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java Thu Jul 11 22:36:01 2013 +0200
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java Fri Jul 12 11:07:58 2013 +0200
3.3 @@ -17,6 +17,7 @@
3.4 */
3.5 package org.apidesign.vm4brwsr;
3.6
3.7 +import static org.testng.Assert.assertNotNull;
3.8 import org.testng.annotations.AfterClass;
3.9 import org.testng.annotations.BeforeClass;
3.10 import org.testng.annotations.Test;
3.11 @@ -54,6 +55,15 @@
3.12 Double.valueOf(1)
3.13 );
3.14 }
3.15 +
3.16 + @Test public void callbackWithFourParamsAndReturnType() throws Exception {
3.17 + Object instance = code.execCode("Get an HtmlAnnotations instance", HtmlAnnotations.class, "create__Ljava_lang_Object_2", null);
3.18 + assertNotNull(instance, "Instance created");
3.19 + assertExec("runnable called", HtmlAnnotations.class,
3.20 + "first__JLjava_lang_Object_2JJ",
3.21 + Double.valueOf(42), instance, 42, 31
3.22 + );
3.23 + }
3.24
3.25 private static TestVM code;
3.26