# HG changeset patch # User Jaroslav Tulach # Date 1348144521 -7200 # Node ID 2291e553464a05766659ac3482e894b82aba364a # Parent 361b76189f8d3c88e24a117601d278fd37eb9fc0 We can read definition of Object from the JDK. No need to provide default dummy implementation. InstanceSub is discovered automatically. diff -r 361b76189f8d -r 2291e553464a src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Thu Sep 20 14:20:01 2012 +0200 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Thu Sep 20 14:35:21 2012 +0200 @@ -83,8 +83,6 @@ compiler.generateStaticField(v); } } - out.append("function java_lang_Object(){}\n"); // XXX temporary - out.append("function java_lang_Object_consV(self){}\n"); // XXX temporary final String className = jc.getName().getInternalName().replace('/', '_'); out.append("\nfunction ").append(className); @@ -576,18 +574,20 @@ } private String findMethodName(Method m) { - StringBuilder out = new StringBuilder(); + StringBuilder tmp = new StringBuilder(); if ("".equals(m.getName())) { // NOI18N - out.append("consV"); // NOI18N + tmp.append("consV"); // NOI18N + } else if ("".equals(m.getName())) { // NOI18N + tmp.append("classV"); // NOI18N } else { - out.append(m.getName()); - outType(m.getReturnType(), out); + tmp.append(m.getName()); + outType(m.getReturnType(), tmp); } List args = m.getParameters(); for (Parameter t : args) { - outType(t.getDescriptor(), out); + outType(t.getDescriptor(), tmp); } - return out.toString(); + return tmp.toString(); } private String findMethodName(CPMethodInfo mi, int[] cnt, boolean[] hasReturn) { diff -r 361b76189f8d -r 2291e553464a src/test/java/org/apidesign/java4browser/InstanceTest.java --- a/src/test/java/org/apidesign/java4browser/InstanceTest.java Thu Sep 20 14:20:01 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/InstanceTest.java Thu Sep 20 14:35:21 2012 +0200 @@ -77,8 +77,7 @@ private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { StringBuilder sb = new StringBuilder(); Invocable i = StaticMethodTest.compileClass(sb, - "org/apidesign/java4browser/Instance", - "org/apidesign/java4browser/InstanceSub" + "org/apidesign/java4browser/Instance" ); Object ret = null; diff -r 361b76189f8d -r 2291e553464a src/test/java/org/apidesign/java4browser/StaticMethodTest.java --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Thu Sep 20 14:20:01 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Thu Sep 20 14:35:21 2012 +0200 @@ -20,7 +20,9 @@ import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.Set; import java.util.TreeSet; import javax.script.Invocable; @@ -156,13 +158,25 @@ } static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException { - for (String name : names) { + if (sb == null) { + sb = new StringBuilder(); + } + Set processed = new HashSet(); + + LinkedList toProcess = new LinkedList(Arrays.asList(names)); + for (;;) { + toProcess.removeAll(processed); + if (toProcess.isEmpty()) { + break; + } + String name = toProcess.getFirst(); + processed.add(name); + if (name.startsWith("java/") && !name.equals("java/lang/Object")) { + continue; + } InputStream is = StaticMethodTest.class.getClassLoader().getResourceAsStream(name + ".class"); assertNotNull(is, "Class file found"); - if (sb == null) { - sb = new StringBuilder(); - } - ByteCodeToJavaScript.compile(is, sb, null); + ByteCodeToJavaScript.compile(is, sb, toProcess); } ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine js = sem.getEngineByExtension("js");