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 }