# HG changeset patch # User Jaroslav Tulach # Date 1419276824 -3600 # Node ID ff4983098f3f1cd5d18596b66cc16c19854cc5ff # Parent c5d49e70e9923a64c0fcd4ab5956473be4299f1d String is like a primitive type. Keep its signature. diff -r c5d49e70e992 -r ff4983098f3f rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 14 19:28:56 2014 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Dec 22 20:33:44 2014 +0100 @@ -1992,8 +1992,17 @@ while (indx < len) { char ch = params.charAt(indx); if (ch == '[' || ch == 'L') { + int column = params.indexOf(';', indx) + 1; + if (column > indx) { + String real = params.substring(indx, column); + if ("Ljava/lang/String;".equals(real)) { + pb.append("Ljava/lang/String;"); + indx = column; + continue; + } + } pb.append("Ljava/lang/Object;"); - indx = params.indexOf(';', indx) + 1; + indx = column; } else { pb.append(ch); indx++; diff -r c5d49e70e992 -r ff4983098f3f rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Sun Dec 14 19:28:56 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java Mon Dec 22 20:33:44 2014 +0100 @@ -59,7 +59,21 @@ "onError", "Ljava/lang/Object;", false ); assertEquals(res, - "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onError$Ljava_1lang_1Object_12__Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_Object_2", + "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onError$" + + "Ljava_1lang_1Object_12__" + + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_Object_2", + "Pretty long method name" + ); + } + @Test public void mangleJsCallbackToATypeWithString() throws Exception { + String res = ByteCodeToJavaScript.mangleJsCallbacks( + "org.apidesign.bck2brwsr.vmtest.impl.HtmlAnnotations", + "onMessage", "Ljava/lang/String;", false + ); + assertEquals(res, + "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onMessage$" + + "Ljava_1lang_1String_12__" + + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_String_2", "Pretty long method name" ); }