# HG changeset patch # User Jaroslav Tulach # Date 1403732631 -7200 # Node ID 4156b1bd4b825cdf832694bace099630a774d251 # Parent eb97a082741b184a7bf47401f4027b11b3713602 Don't list overriden Object's methods twice diff -r eb97a082741b -r 4156b1bd4b82 rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java Wed Jun 25 22:50:33 2014 +0200 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java Wed Jun 25 23:43:51 2014 +0200 @@ -51,9 +51,14 @@ + "var c = clazz.cnstr;\n" + "if (!cnstr) c = c.prototype;\n" + "var arr = new Array();\n" - + "function check(m) {\n" + + "function check(m, verify) {\n" + " if (m.indexOf(prefix) === 0) {\n" + " if (!c[m].cls) return;\n" + + " if (verify) {\n" + + " for (var i = 0; i < arr.length; i += 3) {\n" + + " if (arr[i] === m) return;\n" + + " }\n" + + " }\n" + " arr.push(m);\n" + " arr.push(c[m]);\n" + " arr.push(c[m].cls.$class);\n" @@ -62,15 +67,15 @@ + "for (m in c) {\n" + " check(m)\n" + "}\n" - + "check('wait__V');\n" - + "check('wait__VJ');\n" - + "check('wait__VJI');\n" - + "check('equals__ZLjava_lang_Object_2');\n" - + "check('toString__Ljava_lang_String_2');\n" - + "check('hashCode__I');\n" - + "check('getClass__Ljava_lang_Class_2');\n" - + "check('notify__V');\n" - + "check('notifyAll__V');\n" + + "check('wait__V', true);\n" + + "check('wait__VJ', true);\n" + + "check('wait__VJI', true);\n" + + "check('equals__ZLjava_lang_Object_2', true);\n" + + "check('toString__Ljava_lang_String_2', true);\n" + + "check('hashCode__I', true);\n" + + "check('getClass__Ljava_lang_Class_2', true);\n" + + "check('notify__V', true);\n" + + "check('notifyAll__V', true);\n" + "return arr;\n") private static native Object[] findMethodData( Class clazz, String prefix, boolean cnstr); diff -r eb97a082741b -r 4156b1bd4b82 rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Wed Jun 25 22:50:33 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Wed Jun 25 23:43:51 2014 +0200 @@ -126,11 +126,20 @@ } @Test public void jsListMethodsInObject() throws Exception { - String methods = Classes.listObject(); + String methods = Classes.listObject(false, ""); assertExec("Methods defined in Object", Classes.class, - "listObject__Ljava_lang_String_2", - methods + "listObject__Ljava_lang_String_2ZLjava_lang_String_2", + methods, false, "" + ); + } + + @Test public void jsListMethodsInString() throws Exception { + String methods = Classes.listObject(true, "toStr"); + + assertExec("Methods defined in Object", Classes.class, + "listObject__Ljava_lang_String_2ZLjava_lang_String_2", + methods, true, "toStr" ); } diff -r eb97a082741b -r 4156b1bd4b82 rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Wed Jun 25 22:50:33 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Wed Jun 25 23:43:51 2014 +0200 @@ -121,10 +121,14 @@ return sb.toString().toString(); } - static String listObject() { + static String listObject(boolean string, String prefix) { + final Class c = string ? String.class : Object.class; StringBuilder sb = new StringBuilder(); - for (Method m : Object.class.getMethods()) { - sb.append(m.getName()).append("\n"); + for (Method m : c.getMethods()) { + final String n = m.getName(); + if (n.startsWith(prefix)) { + sb.append(n).append("\n"); + } } return sb.toString().toString(); }