# HG changeset patch # User Jaroslav Tulach # Date 1373620078 -7200 # Node ID 4b43ab1f72e8f289b4472a1f772b1c7c647d6dd3 # Parent c3e68a67d46d6c0e2ef9212c6e4f4b17d709a0c1 Make sure callback with parameters works. Plus get ready to usage of $ sign in $JsCallbacks$ naming scheme. diff -r c3e68a67d46d -r 4b43ab1f72e8 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jul 11 22:36:01 2013 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jul 12 11:07:58 2013 +0200 @@ -1742,7 +1742,8 @@ } StringBuilder sb = new StringBuilder(); final String rfqn = replace(fqn); - sb.append(rfqn).append("__").append(method).append("____Ljava_lang_Object_2"); + sb.append(rfqn).append("$").append(method). + append('$').append(params).append("__Ljava_lang_Object_2"); if (!isStatic) { sb.append('L').append(rfqn).append("_2"); } diff -r c3e68a67d46d -r 4b43ab1f72e8 rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java Thu Jul 11 22:36:01 2013 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java Fri Jul 12 11:07:58 2013 +0200 @@ -49,5 +49,21 @@ private static native void callback(Runnable r); @JavaScriptBody(args = { }, javacall = true, body = "return @org.apidesign.vm4brwsr.HtmlAnnotations::callback()();") - private static native int staticCallback(); + public static native int staticCallback(); + + + protected long chooseLong(boolean takeFirst, boolean takeSecond, long first, long second) { + long l = 0; + if (takeFirst) l += first; + if (takeSecond) l += second; + return l; + } + + public static Object create() { + return new HtmlAnnotations(); + } + @JavaScriptBody(args = { "impl", "a", "b" }, javacall = true, body = + "return impl.@org.apidesign.vm4brwsr.HtmlAnnotations::chooseLong(ZZJJ)(true, false, a, b);" + ) + public static native long first(Object impl, long a, long b); } diff -r c3e68a67d46d -r 4b43ab1f72e8 rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java Thu Jul 11 22:36:01 2013 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java Fri Jul 12 11:07:58 2013 +0200 @@ -17,6 +17,7 @@ */ package org.apidesign.vm4brwsr; +import static org.testng.Assert.assertNotNull; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -54,6 +55,15 @@ Double.valueOf(1) ); } + + @Test public void callbackWithFourParamsAndReturnType() throws Exception { + Object instance = code.execCode("Get an HtmlAnnotations instance", HtmlAnnotations.class, "create__Ljava_lang_Object_2", null); + assertNotNull(instance, "Instance created"); + assertExec("runnable called", HtmlAnnotations.class, + "first__JLjava_lang_Object_2JJ", + Double.valueOf(42), instance, 42, 31 + ); + } private static TestVM code;