# HG changeset patch # User Jaroslav Tulach # Date 1351632932 -3600 # Node ID 15df78d24302c276782a1b75db665f9251b022ea # Parent 8db5cf267d749a6dec167d42567b7daf327bad79 Print the information about "needs" only once per each type diff -r 8db5cf267d74 -r 15df78d24302 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Oct 30 22:22:18 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Oct 30 22:35:32 2012 +0100 @@ -967,9 +967,10 @@ } private void addReference(String cn) throws IOException { - out.append(" /* needs ").append(cn).append(" */"); if (references != null) { - references.add(cn); + if (references.add(cn)) { + out.append(" /* needs ").append(cn).append(" */"); + } } } diff -r 8db5cf267d74 -r 15df78d24302 vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Tue Oct 30 22:22:18 2012 +0100 +++ 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");