String is like a primitive type. Keep its signature.
1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 14 19:28:56 2014 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Dec 22 20:33:44 2014 +0100
1.3 @@ -1992,8 +1992,17 @@
1.4 while (indx < len) {
1.5 char ch = params.charAt(indx);
1.6 if (ch == '[' || ch == 'L') {
1.7 + int column = params.indexOf(';', indx) + 1;
1.8 + if (column > indx) {
1.9 + String real = params.substring(indx, column);
1.10 + if ("Ljava/lang/String;".equals(real)) {
1.11 + pb.append("Ljava/lang/String;");
1.12 + indx = column;
1.13 + continue;
1.14 + }
1.15 + }
1.16 pb.append("Ljava/lang/Object;");
1.17 - indx = params.indexOf(';', indx) + 1;
1.18 + indx = column;
1.19 } else {
1.20 pb.append(ch);
1.21 indx++;
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Sun Dec 14 19:28:56 2014 +0100
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Mon Dec 22 20:33:44 2014 +0100
2.3 @@ -59,7 +59,21 @@
2.4 "onError", "Ljava/lang/Object;", false
2.5 );
2.6 assertEquals(res,
2.7 - "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onError$Ljava_1lang_1Object_12__Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_Object_2",
2.8 + "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onError$"
2.9 + + "Ljava_1lang_1Object_12__"
2.10 + + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_Object_2",
2.11 + "Pretty long method name"
2.12 + );
2.13 + }
2.14 + @Test public void mangleJsCallbackToATypeWithString() throws Exception {
2.15 + String res = ByteCodeToJavaScript.mangleJsCallbacks(
2.16 + "org.apidesign.bck2brwsr.vmtest.impl.HtmlAnnotations",
2.17 + "onMessage", "Ljava/lang/String;", false
2.18 + );
2.19 + assertEquals(res,
2.20 + "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onMessage$"
2.21 + + "Ljava_1lang_1String_12__"
2.22 + + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_String_2",
2.23 "Pretty long method name"
2.24 );
2.25 }