Methods on object need to be manually enumerated defprop
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 25 Jun 2014 22:50:33 +0200
branchdefprop
changeset 1636eb97a082741b
parent 1635 deef1427bbe7
child 1637 4156b1bd4b82
Methods on object need to be manually enumerated
rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java
rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java
     1.1 --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java	Mon Jun 23 19:35:22 2014 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java	Wed Jun 25 22:50:33 2014 +0200
     1.3 @@ -49,17 +49,29 @@
     1.4      @JavaScriptBody(args = {"clazz", "prefix", "cnstr"},
     1.5          body = ""
     1.6          + "var c = clazz.cnstr;\n"
     1.7 -        + "if (!cnstr) c = c.prototype;"
     1.8 +        + "if (!cnstr) c = c.prototype;\n"
     1.9          + "var arr = new Array();\n"
    1.10 -        + "for (m in c) {\n"
    1.11 +        + "function check(m) {\n"
    1.12          + "  if (m.indexOf(prefix) === 0) {\n"
    1.13 -        + "     if (!c[m].cls) continue;\n"
    1.14 +        + "     if (!c[m].cls) return;\n"
    1.15          + "     arr.push(m);\n"
    1.16          + "     arr.push(c[m]);\n"
    1.17          + "     arr.push(c[m].cls.$class);\n"
    1.18 -        + "  }"
    1.19 +        + "  }\n"
    1.20          + "}\n"
    1.21 -        + "return arr;")
    1.22 +        + "for (m in c) {\n"
    1.23 +        + "  check(m)\n"
    1.24 +        + "}\n"
    1.25 +        + "check('wait__V');\n"
    1.26 +        + "check('wait__VJ');\n"
    1.27 +        + "check('wait__VJI');\n"
    1.28 +        + "check('equals__ZLjava_lang_Object_2');\n"
    1.29 +        + "check('toString__Ljava_lang_String_2');\n"
    1.30 +        + "check('hashCode__I');\n"
    1.31 +        + "check('getClass__Ljava_lang_Class_2');\n"
    1.32 +        + "check('notify__V');\n"
    1.33 +        + "check('notifyAll__V');\n"
    1.34 +        + "return arr;\n")
    1.35      private static native Object[] findMethodData(
    1.36          Class<?> clazz, String prefix, boolean cnstr);
    1.37  
     2.1 --- a/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java	Mon Jun 23 19:35:22 2014 +0200
     2.2 +++ b/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java	Wed Jun 25 22:50:33 2014 +0200
     2.3 @@ -101,6 +101,9 @@
     2.4              if ("provided".equals(a.getScope())) {
     2.5                  continue;
     2.6              }
     2.7 +            if ("system".equals(a.getScope())) {
     2.8 +                continue;
     2.9 +            }
    2.10              File aot = new File(prj.getBuild().getDirectory(), classPathPrefix);
    2.11              aot.mkdirs();
    2.12              File js = new File(aot, n.substring(0, n.length() - 4) + ".js");
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Mon Jun 23 19:35:22 2014 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Wed Jun 25 22:50:33 2014 +0200
     3.3 @@ -124,6 +124,15 @@
     3.4              "java.lang.Object"
     3.5          );
     3.6      }
     3.7 +
     3.8 +    @Test public void jsListMethodsInObject() throws Exception {
     3.9 +        String methods = Classes.listObject();
    3.10 +        
    3.11 +        assertExec("Methods defined in Object", Classes.class, 
    3.12 +            "listObject__Ljava_lang_String_2", 
    3.13 +            methods
    3.14 +        );
    3.15 +    }
    3.16      
    3.17      @Test public void jsInvokeParamMethod() throws Exception {
    3.18          assertExec("sums two numbers via reflection", Classes.class, 
     4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Mon Jun 23 19:35:22 2014 +0200
     4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Wed Jun 25 22:50:33 2014 +0200
     4.3 @@ -120,6 +120,14 @@
     4.4          }
     4.5          return sb.toString().toString();
     4.6      }
     4.7 +
     4.8 +    static String listObject() {
     4.9 +        StringBuilder sb = new StringBuilder();
    4.10 +        for (Method m : Object.class.getMethods()) {
    4.11 +            sb.append(m.getName()).append("\n");
    4.12 +        }
    4.13 +        return sb.toString().toString();
    4.14 +    }
    4.15      @Retention(RetentionPolicy.CLASS)
    4.16      @interface Ann {
    4.17      }