diff -r a0505844750a -r 15df78d24302 vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Tue Oct 16 18:04:11 2012 +0200 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Tue Oct 30 22:35:32 2012 +0100 @@ -23,11 +23,13 @@ import java.io.InputStream; import java.io.Writer; import java.net.URL; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -59,8 +61,16 @@ } static void compile(ClassLoader l, Appendable out, List names) throws IOException { for (String baseClass : names) { - Map processed = new HashMap(); - LinkedList toProcess = new LinkedList(); + final Map processed = new HashMap(); + LinkedHashSet toProcess = new LinkedHashSet() { + @Override + public boolean add(String e) { + if (processed.containsKey(e)) { + return false; + } + return super.add(e); + } + }; toProcess.add(baseClass); for (;;) { String name = null; @@ -75,25 +85,7 @@ if (name == null) { break; } - if (name.startsWith("java/") - && !name.equals("java/lang/Object") - && !name.equals("java/lang/Class") - && !name.equals("java/lang/Math") - && !name.equals("java/lang/Number") - && !name.equals("java/lang/NumberFormatException") - && !name.equals("java/lang/IllegalArgumentException") - && !name.equals("java/lang/Integer") - && !name.equals("java/lang/Float") - && !name.equals("java/lang/Double") - && !name.equals("java/lang/Throwable") - && !name.equals("java/lang/Exception") - && !name.equals("java/lang/RuntimeException") - && !name.equals("java/lang/UnsupportedOperationException") - && !name.equals("java/lang/String") - && !name.equals("java/lang/String$CaseInsensitiveComparator") - && !name.equals("java/lang/StringBuilder") - && !name.equals("java/lang/AbstractStringBuilder") - ) { + if (name.startsWith("sun/")) { processed.put(name, ""); continue; } @@ -134,10 +126,11 @@ readResource(emul, out); } } - - Collections.reverse(toProcess); - for (String clazz : toProcess) { + List toInit = new ArrayList(toProcess); + Collections.reverse(toInit); + + for (String clazz : toInit) { String initCode = processed.remove(clazz); if (initCode != null) { out.append(initCode).append("\n");