vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java
changeset 129 15df78d24302
parent 114 a0505844750a
child 133 245d9215a97e
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java	Tue Oct 16 18:04:11 2012 +0200
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java	Tue Oct 30 22:35:32 2012 +0100
     1.3 @@ -23,11 +23,13 @@
     1.4  import java.io.InputStream;
     1.5  import java.io.Writer;
     1.6  import java.net.URL;
     1.7 +import java.util.ArrayList;
     1.8  import java.util.Arrays;
     1.9  import java.util.Collections;
    1.10  import java.util.Enumeration;
    1.11  import java.util.HashMap;
    1.12  import java.util.Iterator;
    1.13 +import java.util.LinkedHashSet;
    1.14  import java.util.LinkedList;
    1.15  import java.util.List;
    1.16  import java.util.Map;
    1.17 @@ -59,8 +61,16 @@
    1.18      }
    1.19      static void compile(ClassLoader l, Appendable out, List<String> names) throws IOException {
    1.20          for (String baseClass : names) {
    1.21 -            Map<String,String> processed = new HashMap<String, String>();
    1.22 -            LinkedList<String> toProcess = new LinkedList<String>();
    1.23 +            final Map<String,String> processed = new HashMap<String, String>();
    1.24 +            LinkedHashSet<String> toProcess = new LinkedHashSet<String>() {
    1.25 +                @Override
    1.26 +                public boolean add(String e) {
    1.27 +                    if (processed.containsKey(e)) {
    1.28 +                        return false;
    1.29 +                    }
    1.30 +                    return super.add(e);
    1.31 +                }
    1.32 +            };
    1.33              toProcess.add(baseClass);
    1.34              for (;;) {
    1.35                  String name = null;
    1.36 @@ -75,25 +85,7 @@
    1.37                  if (name == null) {
    1.38                      break;
    1.39                  }
    1.40 -                if (name.startsWith("java/")
    1.41 -                    && !name.equals("java/lang/Object")
    1.42 -                    && !name.equals("java/lang/Class")
    1.43 -                    && !name.equals("java/lang/Math")
    1.44 -                    && !name.equals("java/lang/Number")
    1.45 -                    && !name.equals("java/lang/NumberFormatException")
    1.46 -                    && !name.equals("java/lang/IllegalArgumentException")
    1.47 -                    && !name.equals("java/lang/Integer")
    1.48 -                    && !name.equals("java/lang/Float")
    1.49 -                    && !name.equals("java/lang/Double")
    1.50 -                    && !name.equals("java/lang/Throwable")
    1.51 -                    && !name.equals("java/lang/Exception")
    1.52 -                    && !name.equals("java/lang/RuntimeException")
    1.53 -                    && !name.equals("java/lang/UnsupportedOperationException")
    1.54 -                    && !name.equals("java/lang/String")
    1.55 -                    && !name.equals("java/lang/String$CaseInsensitiveComparator")
    1.56 -                    && !name.equals("java/lang/StringBuilder")
    1.57 -                    && !name.equals("java/lang/AbstractStringBuilder")
    1.58 -                ) {
    1.59 +                if (name.startsWith("sun/")) {
    1.60                      processed.put(name, "");
    1.61                      continue;
    1.62                  }            
    1.63 @@ -134,10 +126,11 @@
    1.64                      readResource(emul, out);
    1.65                  }
    1.66              }
    1.67 -            
    1.68 -            Collections.reverse(toProcess);
    1.69  
    1.70 -            for (String clazz : toProcess) {
    1.71 +            List<String> toInit = new ArrayList<String>(toProcess);
    1.72 +            Collections.reverse(toInit);
    1.73 +
    1.74 +            for (String clazz : toInit) {
    1.75                  String initCode = processed.remove(clazz);
    1.76                  if (initCode != null) {
    1.77                      out.append(initCode).append("\n");