diff -r ad188879b6fe -r 384681be798f langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Nov 13 08:06:00 2012 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Nov 13 15:09:15 2012 -0800 @@ -781,6 +781,8 @@ final JavaCompiler compiler; /** The log for the round. */ final Log log; + /** The diagnostic handler for the round. */ + final Log.DeferredDiagnosticHandler deferredDiagnosticHandler; /** The ASTs to be compiled. */ List roots; @@ -798,7 +800,8 @@ int nMessagerErrors; /** Create a round (common code). */ - private Round(Context context, int number, int priorErrors, int priorWarnings) { + private Round(Context context, int number, int priorErrors, int priorWarnings, + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { this.context = context; this.number = number; @@ -806,7 +809,12 @@ log = Log.instance(context); log.nerrors = priorErrors; log.nwarnings += priorWarnings; - log.deferAll(); + if (number == 1) { + Assert.checkNonNull(deferredDiagnosticHandler); + this.deferredDiagnosticHandler = deferredDiagnosticHandler; + } else { + this.deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); + } // the following is for the benefit of JavacProcessingEnvironment.getContext() JavacProcessingEnvironment.this.context = context; @@ -817,8 +825,9 @@ } /** Create the first round. */ - Round(Context context, List roots, List classSymbols) { - this(context, 1, 0, 0); + Round(Context context, List roots, List classSymbols, + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { + this(context, 1, 0, 0, deferredDiagnosticHandler); this.roots = roots; genClassFiles = new HashMap(); @@ -841,7 +850,8 @@ this(prev.nextContext(), prev.number+1, prev.nMessagerErrors, - prev.compiler.log.nwarnings); + prev.compiler.log.nwarnings, + null); this.genClassFiles = prev.genClassFiles; List parsedFiles = compiler.parseFiles(newSourceFiles); @@ -912,7 +922,7 @@ if (messager.errorRaised()) return true; - for (JCDiagnostic d: log.deferredDiagnostics) { + for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) { switch (d.getKind()) { case WARNING: if (werror) @@ -1006,7 +1016,8 @@ // suppress errors, which are all presumed to be transient resolve errors kinds.remove(JCDiagnostic.Kind.ERROR); } - log.reportDeferredDiagnostics(kinds); + deferredDiagnosticHandler.reportDeferredDiagnostics(kinds); + log.popDiagnosticHandler(deferredDiagnosticHandler); } /** Print info about this round. */ @@ -1112,7 +1123,8 @@ public JavaCompiler doProcessing(Context context, List roots, List classSymbols, - Iterable pckSymbols) { + Iterable pckSymbols, + Log.DeferredDiagnosticHandler deferredDiagnosticHandler) { log = Log.instance(context); Set specifiedPackages = new LinkedHashSet(); @@ -1120,7 +1132,7 @@ specifiedPackages.add(psym); this.specifiedPackages = Collections.unmodifiableSet(specifiedPackages); - Round round = new Round(context, roots, classSymbols); + Round round = new Round(context, roots, classSymbols, deferredDiagnosticHandler); boolean errorStatus; boolean moreToDo;