# HG changeset patch # User Jaroslav Tulach # Date 1403729433 -7200 # Node ID eb97a082741b184a7bf47401f4027b11b3713602 # Parent deef1427bbe7f0e4112de88045de2fa64fd45aa6 Methods on object need to be manually enumerated diff -r deef1427bbe7 -r eb97a082741b 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 Mon Jun 23 19:35:22 2014 +0200 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java Wed Jun 25 22:50:33 2014 +0200 @@ -49,17 +49,29 @@ @JavaScriptBody(args = {"clazz", "prefix", "cnstr"}, body = "" + "var c = clazz.cnstr;\n" - + "if (!cnstr) c = c.prototype;" + + "if (!cnstr) c = c.prototype;\n" + "var arr = new Array();\n" - + "for (m in c) {\n" + + "function check(m) {\n" + " if (m.indexOf(prefix) === 0) {\n" - + " if (!c[m].cls) continue;\n" + + " if (!c[m].cls) return;\n" + " arr.push(m);\n" + " arr.push(c[m]);\n" + " arr.push(c[m].cls.$class);\n" - + " }" + + " }\n" + "}\n" - + "return arr;") + + "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" + + "return arr;\n") private static native Object[] findMethodData( Class clazz, String prefix, boolean cnstr); diff -r deef1427bbe7 -r eb97a082741b rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java --- a/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java Mon Jun 23 19:35:22 2014 +0200 +++ b/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java Wed Jun 25 22:50:33 2014 +0200 @@ -101,6 +101,9 @@ if ("provided".equals(a.getScope())) { continue; } + if ("system".equals(a.getScope())) { + continue; + } File aot = new File(prj.getBuild().getDirectory(), classPathPrefix); aot.mkdirs(); File js = new File(aot, n.substring(0, n.length() - 4) + ".js"); diff -r deef1427bbe7 -r eb97a082741b rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Mon Jun 23 19:35:22 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Wed Jun 25 22:50:33 2014 +0200 @@ -124,6 +124,15 @@ "java.lang.Object" ); } + + @Test public void jsListMethodsInObject() throws Exception { + String methods = Classes.listObject(); + + assertExec("Methods defined in Object", Classes.class, + "listObject__Ljava_lang_String_2", + methods + ); + } @Test public void jsInvokeParamMethod() throws Exception { assertExec("sums two numbers via reflection", Classes.class, diff -r deef1427bbe7 -r eb97a082741b rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Mon Jun 23 19:35:22 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Wed Jun 25 22:50:33 2014 +0200 @@ -120,6 +120,14 @@ } return sb.toString().toString(); } + + static String listObject() { + StringBuilder sb = new StringBuilder(); + for (Method m : Object.class.getMethods()) { + sb.append(m.getName()).append("\n"); + } + return sb.toString().toString(); + } @Retention(RetentionPolicy.CLASS) @interface Ann { }