src/share/classes/com/sun/tools/javac/main/JavaCompiler.java

changeset 95
fac6b1beaa5a
parent 77
866db3b5e7b2
child 111
a92b756a888f
     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  

mercurial