String is like a primitive type. Keep its signature.
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 22 Dec 2014 20:33:44 +0100
changeset 1754ff4983098f3f
parent 1753 c5d49e70e992
child 1755 03e8d4077e55
String is like a primitive type. Keep its signature.
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java
     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      }