1.1 --- a/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Aug 08 17:43:24 2008 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Aug 08 17:48:04 2008 +0100 1.3 @@ -27,6 +27,7 @@ 1.4 1.5 import java.io.*; 1.6 import java.util.HashSet; 1.7 +import java.util.LinkedHashSet; 1.8 import java.util.LinkedHashMap; 1.9 import java.util.Map; 1.10 import java.util.MissingResourceException; 1.11 @@ -1185,14 +1186,16 @@ 1.12 * are processed through attribute and flow before subtypes are translated. 1.13 */ 1.14 class ScanNested extends TreeScanner { 1.15 - Set<Env<AttrContext>> dependencies = new HashSet<Env<AttrContext>>(); 1.16 + Set<Env<AttrContext>> dependencies = new LinkedHashSet<Env<AttrContext>>(); 1.17 public void visitClassDef(JCClassDecl node) { 1.18 Type st = types.supertype(node.sym.type); 1.19 if (st.tag == TypeTags.CLASS) { 1.20 ClassSymbol c = st.tsym.outermostClass(); 1.21 Env<AttrContext> stEnv = enter.getEnv(c); 1.22 - if (stEnv != null && env != stEnv) 1.23 - dependencies.add(stEnv); 1.24 + if (stEnv != null && env != stEnv) { 1.25 + if (dependencies.add(stEnv)) 1.26 + scan(stEnv.tree); 1.27 + } 1.28 } 1.29 super.visitClassDef(node); 1.30 } 1.31 @@ -1204,6 +1207,11 @@ 1.32 flow(attribute(dep)); 1.33 } 1.34 1.35 + //We need to check for error another time as more classes might 1.36 + //have been attributed and analyzed at this stage 1.37 + if (errorCount() > 0) 1.38 + return; 1.39 + 1.40 if (verboseCompilePolicy) 1.41 log.printLines(log.noticeWriter, "[desugar " + env.enclClass.sym + "]"); 1.42