Don't list overriden Object's methods twice defprop
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 25 Jun 2014 23:43:51 +0200
branchdefprop
changeset 16374156b1bd4b82
parent 1636 eb97a082741b
child 1638 a84f511654ae
Don't list overriden Object's methods twice
rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.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	Wed Jun 25 22:50:33 2014 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java	Wed Jun 25 23:43:51 2014 +0200
     1.3 @@ -51,9 +51,14 @@
     1.4          + "var c = clazz.cnstr;\n"
     1.5          + "if (!cnstr) c = c.prototype;\n"
     1.6          + "var arr = new Array();\n"
     1.7 -        + "function check(m) {\n"
     1.8 +        + "function check(m, verify) {\n"
     1.9          + "  if (m.indexOf(prefix) === 0) {\n"
    1.10          + "     if (!c[m].cls) return;\n"
    1.11 +        + "     if (verify) {\n"
    1.12 +        + "       for (var i = 0; i < arr.length; i += 3) {\n"
    1.13 +        + "         if (arr[i] === m) return;\n"
    1.14 +        + "       }\n"
    1.15 +        + "     }\n"
    1.16          + "     arr.push(m);\n"
    1.17          + "     arr.push(c[m]);\n"
    1.18          + "     arr.push(c[m].cls.$class);\n"
    1.19 @@ -62,15 +67,15 @@
    1.20          + "for (m in c) {\n"
    1.21          + "  check(m)\n"
    1.22          + "}\n"
    1.23 -        + "check('wait__V');\n"
    1.24 -        + "check('wait__VJ');\n"
    1.25 -        + "check('wait__VJI');\n"
    1.26 -        + "check('equals__ZLjava_lang_Object_2');\n"
    1.27 -        + "check('toString__Ljava_lang_String_2');\n"
    1.28 -        + "check('hashCode__I');\n"
    1.29 -        + "check('getClass__Ljava_lang_Class_2');\n"
    1.30 -        + "check('notify__V');\n"
    1.31 -        + "check('notifyAll__V');\n"
    1.32 +        + "check('wait__V', true);\n"
    1.33 +        + "check('wait__VJ', true);\n"
    1.34 +        + "check('wait__VJI', true);\n"
    1.35 +        + "check('equals__ZLjava_lang_Object_2', true);\n"
    1.36 +        + "check('toString__Ljava_lang_String_2', true);\n"
    1.37 +        + "check('hashCode__I', true);\n"
    1.38 +        + "check('getClass__Ljava_lang_Class_2', true);\n"
    1.39 +        + "check('notify__V', true);\n"
    1.40 +        + "check('notifyAll__V', true);\n"
    1.41          + "return arr;\n")
    1.42      private static native Object[] findMethodData(
    1.43          Class<?> clazz, String prefix, boolean cnstr);
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Wed Jun 25 22:50:33 2014 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Wed Jun 25 23:43:51 2014 +0200
     2.3 @@ -126,11 +126,20 @@
     2.4      }
     2.5  
     2.6      @Test public void jsListMethodsInObject() throws Exception {
     2.7 -        String methods = Classes.listObject();
     2.8 +        String methods = Classes.listObject(false, "");
     2.9          
    2.10          assertExec("Methods defined in Object", Classes.class, 
    2.11 -            "listObject__Ljava_lang_String_2", 
    2.12 -            methods
    2.13 +            "listObject__Ljava_lang_String_2ZLjava_lang_String_2", 
    2.14 +            methods, false, ""
    2.15 +        );
    2.16 +    }
    2.17 +
    2.18 +    @Test public void jsListMethodsInString() throws Exception {
    2.19 +        String methods = Classes.listObject(true, "toStr");
    2.20 +        
    2.21 +        assertExec("Methods defined in Object", Classes.class, 
    2.22 +            "listObject__Ljava_lang_String_2ZLjava_lang_String_2", 
    2.23 +            methods, true, "toStr"
    2.24          );
    2.25      }
    2.26      
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Wed Jun 25 22:50:33 2014 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Wed Jun 25 23:43:51 2014 +0200
     3.3 @@ -121,10 +121,14 @@
     3.4          return sb.toString().toString();
     3.5      }
     3.6  
     3.7 -    static String listObject() {
     3.8 +    static String listObject(boolean string, String prefix) {
     3.9 +        final Class<?> c = string ? String.class : Object.class;
    3.10          StringBuilder sb = new StringBuilder();
    3.11 -        for (Method m : Object.class.getMethods()) {
    3.12 -            sb.append(m.getName()).append("\n");
    3.13 +        for (Method m : c.getMethods()) {
    3.14 +            final String n = m.getName();
    3.15 +            if (n.startsWith(prefix)) {
    3.16 +                sb.append(n).append("\n");
    3.17 +            }
    3.18          }
    3.19          return sb.toString().toString();
    3.20      }