--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Tue Nov 13 08:06:00 2012 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Tue Nov 13 15:09:15 2012 -0800
@@ -1018,6 +1018,8 @@
*/
boolean processAnnotations = false;
+ Log.DeferredDiagnosticHandler deferredDiagnosticHandler;
+
/**
* Object to handle annotation processing.
*/
@@ -1048,7 +1050,7 @@
genEndPos = true;
if (!taskListener.isEmpty())
taskListener.started(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING));
- log.deferAll();
+ deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log);
} else { // free resources
procEnvImpl.close();
}
@@ -1079,7 +1081,8 @@
// or other errors during enter which cannot be fixed by running
// any annotation processors.
if (unrecoverableError()) {
- log.reportDeferredDiagnostics();
+ deferredDiagnosticHandler.reportDeferredDiagnostics();
+ log.popDiagnosticHandler(deferredDiagnosticHandler);
return this;
}
}
@@ -1102,10 +1105,12 @@
log.error("proc.no.explicit.annotation.processing.requested",
classnames);
}
- log.reportDeferredDiagnostics();
+ Assert.checkNull(deferredDiagnosticHandler);
return this; // continue regular compilation
}
+ Assert.checkNonNull(deferredDiagnosticHandler);
+
try {
List<ClassSymbol> classSymbols = List.nil();
List<PackageSymbol> pckSymbols = List.nil();
@@ -1115,7 +1120,8 @@
if (!explicitAnnotationProcessingRequested()) {
log.error("proc.no.explicit.annotation.processing.requested",
classnames);
- log.reportDeferredDiagnostics();
+ deferredDiagnosticHandler.reportDeferredDiagnostics();
+ log.popDiagnosticHandler(deferredDiagnosticHandler);
return this; // TODO: Will this halt compilation?
} else {
boolean errors = false;
@@ -1148,33 +1154,36 @@
}
}
if (errors) {
- log.reportDeferredDiagnostics();
+ deferredDiagnosticHandler.reportDeferredDiagnostics();
+ log.popDiagnosticHandler(deferredDiagnosticHandler);
return this;
}
}
}
try {
- JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols);
+ JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols,
+ deferredDiagnosticHandler);
if (c != this)
annotationProcessingOccurred = c.annotationProcessingOccurred = true;
// doProcessing will have handled deferred diagnostics
- Assert.check(c.log.deferredDiagFilter == null
- && c.log.deferredDiagnostics.size() == 0);
return c;
} finally {
procEnvImpl.close();
}
} catch (CompletionFailure ex) {
log.error("cant.access", ex.sym, ex.getDetailValue());
- log.reportDeferredDiagnostics();
+ deferredDiagnosticHandler.reportDeferredDiagnostics();
+ log.popDiagnosticHandler(deferredDiagnosticHandler);
return this;
}
}
private boolean unrecoverableError() {
- for (JCDiagnostic d: log.deferredDiagnostics) {
- if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE))
- return true;
+ if (deferredDiagnosticHandler != null) {
+ for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) {
+ if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE))
+ return true;
+ }
}
return false;
}