langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
changeset 1046 e395ce284cbf
parent 936 1d395a623f16
child 1258 1cf37d8837d1
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Fri Aug 08 17:43:24 2008 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Fri Aug 08 17:48:04 2008 +0100
@@ -27,6 +27,7 @@
 
 import java.io.*;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.MissingResourceException;
@@ -1185,14 +1186,16 @@
          * are processed through attribute and flow before subtypes are translated.
          */
         class ScanNested extends TreeScanner {
-            Set<Env<AttrContext>> dependencies = new HashSet<Env<AttrContext>>();
+            Set<Env<AttrContext>> dependencies = new LinkedHashSet<Env<AttrContext>>();
             public void visitClassDef(JCClassDecl node) {
                 Type st = types.supertype(node.sym.type);
                 if (st.tag == TypeTags.CLASS) {
                     ClassSymbol c = st.tsym.outermostClass();
                     Env<AttrContext> stEnv = enter.getEnv(c);
-                    if (stEnv != null && env != stEnv)
-                        dependencies.add(stEnv);
+                    if (stEnv != null && env != stEnv) {
+                        if (dependencies.add(stEnv))
+                            scan(stEnv.tree);
+                    }
                 }
                 super.visitClassDef(node);
             }
@@ -1204,6 +1207,11 @@
                 flow(attribute(dep));
         }
 
+        //We need to check for error another time as more classes might
+        //have been attributed and analyzed at this stage
+        if (errorCount() > 0)
+            return;
+
         if (verboseCompilePolicy)
             log.printLines(log.noticeWriter, "[desugar " + env.enclClass.sym + "]");