1.1 --- a/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Tue Nov 13 08:06:00 2012 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Tue Nov 13 15:09:15 2012 -0800 1.3 @@ -1018,6 +1018,8 @@ 1.4 */ 1.5 boolean processAnnotations = false; 1.6 1.7 + Log.DeferredDiagnosticHandler deferredDiagnosticHandler; 1.8 + 1.9 /** 1.10 * Object to handle annotation processing. 1.11 */ 1.12 @@ -1048,7 +1050,7 @@ 1.13 genEndPos = true; 1.14 if (!taskListener.isEmpty()) 1.15 taskListener.started(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING)); 1.16 - log.deferAll(); 1.17 + deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); 1.18 } else { // free resources 1.19 procEnvImpl.close(); 1.20 } 1.21 @@ -1079,7 +1081,8 @@ 1.22 // or other errors during enter which cannot be fixed by running 1.23 // any annotation processors. 1.24 if (unrecoverableError()) { 1.25 - log.reportDeferredDiagnostics(); 1.26 + deferredDiagnosticHandler.reportDeferredDiagnostics(); 1.27 + log.popDiagnosticHandler(deferredDiagnosticHandler); 1.28 return this; 1.29 } 1.30 } 1.31 @@ -1102,10 +1105,12 @@ 1.32 log.error("proc.no.explicit.annotation.processing.requested", 1.33 classnames); 1.34 } 1.35 - log.reportDeferredDiagnostics(); 1.36 + Assert.checkNull(deferredDiagnosticHandler); 1.37 return this; // continue regular compilation 1.38 } 1.39 1.40 + Assert.checkNonNull(deferredDiagnosticHandler); 1.41 + 1.42 try { 1.43 List<ClassSymbol> classSymbols = List.nil(); 1.44 List<PackageSymbol> pckSymbols = List.nil(); 1.45 @@ -1115,7 +1120,8 @@ 1.46 if (!explicitAnnotationProcessingRequested()) { 1.47 log.error("proc.no.explicit.annotation.processing.requested", 1.48 classnames); 1.49 - log.reportDeferredDiagnostics(); 1.50 + deferredDiagnosticHandler.reportDeferredDiagnostics(); 1.51 + log.popDiagnosticHandler(deferredDiagnosticHandler); 1.52 return this; // TODO: Will this halt compilation? 1.53 } else { 1.54 boolean errors = false; 1.55 @@ -1148,33 +1154,36 @@ 1.56 } 1.57 } 1.58 if (errors) { 1.59 - log.reportDeferredDiagnostics(); 1.60 + deferredDiagnosticHandler.reportDeferredDiagnostics(); 1.61 + log.popDiagnosticHandler(deferredDiagnosticHandler); 1.62 return this; 1.63 } 1.64 } 1.65 } 1.66 try { 1.67 - JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols); 1.68 + JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols, 1.69 + deferredDiagnosticHandler); 1.70 if (c != this) 1.71 annotationProcessingOccurred = c.annotationProcessingOccurred = true; 1.72 // doProcessing will have handled deferred diagnostics 1.73 - Assert.check(c.log.deferredDiagFilter == null 1.74 - && c.log.deferredDiagnostics.size() == 0); 1.75 return c; 1.76 } finally { 1.77 procEnvImpl.close(); 1.78 } 1.79 } catch (CompletionFailure ex) { 1.80 log.error("cant.access", ex.sym, ex.getDetailValue()); 1.81 - log.reportDeferredDiagnostics(); 1.82 + deferredDiagnosticHandler.reportDeferredDiagnostics(); 1.83 + log.popDiagnosticHandler(deferredDiagnosticHandler); 1.84 return this; 1.85 } 1.86 } 1.87 1.88 private boolean unrecoverableError() { 1.89 - for (JCDiagnostic d: log.deferredDiagnostics) { 1.90 - if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE)) 1.91 - return true; 1.92 + if (deferredDiagnosticHandler != null) { 1.93 + for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) { 1.94 + if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE)) 1.95 + return true; 1.96 + } 1.97 } 1.98 return false; 1.99 }