1.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Nov 13 08:06:00 2012 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Nov 13 15:09:15 2012 -0800 1.3 @@ -781,6 +781,8 @@ 1.4 final JavaCompiler compiler; 1.5 /** The log for the round. */ 1.6 final Log log; 1.7 + /** The diagnostic handler for the round. */ 1.8 + final Log.DeferredDiagnosticHandler deferredDiagnosticHandler; 1.9 1.10 /** The ASTs to be compiled. */ 1.11 List<JCCompilationUnit> roots; 1.12 @@ -798,7 +800,8 @@ 1.13 int nMessagerErrors; 1.14 1.15 /** Create a round (common code). */ 1.16 - private Round(Context context, int number, int priorErrors, int priorWarnings) { 1.17 + private Round(Context context, int number, int priorErrors, int priorWarnings, 1.18 + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { 1.19 this.context = context; 1.20 this.number = number; 1.21 1.22 @@ -806,7 +809,12 @@ 1.23 log = Log.instance(context); 1.24 log.nerrors = priorErrors; 1.25 log.nwarnings += priorWarnings; 1.26 - log.deferAll(); 1.27 + if (number == 1) { 1.28 + Assert.checkNonNull(deferredDiagnosticHandler); 1.29 + this.deferredDiagnosticHandler = deferredDiagnosticHandler; 1.30 + } else { 1.31 + this.deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); 1.32 + } 1.33 1.34 // the following is for the benefit of JavacProcessingEnvironment.getContext() 1.35 JavacProcessingEnvironment.this.context = context; 1.36 @@ -817,8 +825,9 @@ 1.37 } 1.38 1.39 /** Create the first round. */ 1.40 - Round(Context context, List<JCCompilationUnit> roots, List<ClassSymbol> classSymbols) { 1.41 - this(context, 1, 0, 0); 1.42 + Round(Context context, List<JCCompilationUnit> roots, List<ClassSymbol> classSymbols, 1.43 + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { 1.44 + this(context, 1, 0, 0, deferredDiagnosticHandler); 1.45 this.roots = roots; 1.46 genClassFiles = new HashMap<String,JavaFileObject>(); 1.47 1.48 @@ -841,7 +850,8 @@ 1.49 this(prev.nextContext(), 1.50 prev.number+1, 1.51 prev.nMessagerErrors, 1.52 - prev.compiler.log.nwarnings); 1.53 + prev.compiler.log.nwarnings, 1.54 + null); 1.55 this.genClassFiles = prev.genClassFiles; 1.56 1.57 List<JCCompilationUnit> parsedFiles = compiler.parseFiles(newSourceFiles); 1.58 @@ -912,7 +922,7 @@ 1.59 if (messager.errorRaised()) 1.60 return true; 1.61 1.62 - for (JCDiagnostic d: log.deferredDiagnostics) { 1.63 + for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) { 1.64 switch (d.getKind()) { 1.65 case WARNING: 1.66 if (werror) 1.67 @@ -1006,7 +1016,8 @@ 1.68 // suppress errors, which are all presumed to be transient resolve errors 1.69 kinds.remove(JCDiagnostic.Kind.ERROR); 1.70 } 1.71 - log.reportDeferredDiagnostics(kinds); 1.72 + deferredDiagnosticHandler.reportDeferredDiagnostics(kinds); 1.73 + log.popDiagnosticHandler(deferredDiagnosticHandler); 1.74 } 1.75 1.76 /** Print info about this round. */ 1.77 @@ -1112,7 +1123,8 @@ 1.78 public JavaCompiler doProcessing(Context context, 1.79 List<JCCompilationUnit> roots, 1.80 List<ClassSymbol> classSymbols, 1.81 - Iterable<? extends PackageSymbol> pckSymbols) { 1.82 + Iterable<? extends PackageSymbol> pckSymbols, 1.83 + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { 1.84 log = Log.instance(context); 1.85 1.86 Set<PackageSymbol> specifiedPackages = new LinkedHashSet<PackageSymbol>(); 1.87 @@ -1120,7 +1132,7 @@ 1.88 specifiedPackages.add(psym); 1.89 this.specifiedPackages = Collections.unmodifiableSet(specifiedPackages); 1.90 1.91 - Round round = new Round(context, roots, classSymbols); 1.92 + Round round = new Round(context, roots, classSymbols, deferredDiagnosticHandler); 1.93 1.94 boolean errorStatus; 1.95 boolean moreToDo;