--- 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 + "]");