Support array return type UniversalKO
authorJaroslav Tulach <jaroslav.tulach@netbeans.org>
Thu, 09 Jan 2014 11:14:27 +0100
branchUniversalKO
changeset 4399e6358abb2a0
parent 438 1ad33b8ccea2
child 440 7012d021ae87
Support array return type
boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java
boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java
boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java
     1.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Wed Jan 08 17:46:35 2014 +0100
     1.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Thu Jan 09 11:14:27 2014 +0100
     1.3 @@ -388,7 +388,12 @@
     1.4                      @Override
     1.5                      public SignatureVisitor visitArrayType() {
     1.6                          if (nowReturn) {
     1.7 -                            throw new IllegalStateException("Not supported yet");
     1.8 +                            return new SignatureVisitor(Opcodes.ASM4) {
     1.9 +                                @Override
    1.10 +                                public void visitClassType(String name) {
    1.11 +                                    returnType = Type.getType("[" + Type.getObjectType(name).getDescriptor());
    1.12 +                                }
    1.13 +                            };
    1.14                          }
    1.15                          loadObject();
    1.16                          return new SignatureWriter();
     2.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Wed Jan 08 17:46:35 2014 +0100
     2.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Thu Jan 09 11:14:27 2014 +0100
     2.3 @@ -198,4 +198,14 @@
     2.4          Method st = methodClass.getMethod("recordError", Object.class);
     2.5          assertEquals(st.invoke(methodClass.newInstance(), "Hello"), "Hello", "The same parameter returned");
     2.6      }
     2.7 +    
     2.8 +    @Test public void arrayInOut() throws Throwable {
     2.9 +        String[] arr = { "Ahoj" };
    2.10 +        Method st = methodClass.getMethod("arr", Object[].class);
    2.11 +        Object ret = st.invoke(null, (Object) arr);
    2.12 +        assertTrue(ret instanceof Object[], "Expecting array: " + ret);
    2.13 +        Object[] res = (Object[]) ret;
    2.14 +        assertEquals(res.length, 1, "One element");
    2.15 +        assertEquals(res[0], "Ahoj", "The right string");
    2.16 +    }
    2.17  }
    2.18 \ No newline at end of file
     3.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Wed Jan 08 17:46:35 2014 +0100
     3.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Thu Jan 09 11:14:27 2014 +0100
     3.3 @@ -106,6 +106,9 @@
     3.4      @JavaScriptBody(args = { "v" }, javacall = true, body = "return @java.lang.Integer::parseInt(Ljava/lang/String;)(v);")
     3.5      public static native int parseInt(String v);
     3.6      
     3.7 +    @JavaScriptBody(args = "arr", body = "return arr;")
     3.8 +    public static native Object[] arr(Object[] arr);
     3.9 +    
    3.10      @JavaScriptBody(args = { "useA", "useB", "a", "b" }, body = "var l = 0;"
    3.11          + "if (useA) l += a;\n"
    3.12          + "if (useB) l += b;\n"