--- a/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Tue Nov 13 08:06:00 2012 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Tue Nov 13 15:09:15 2012 -0800
@@ -249,28 +249,25 @@
JCTree newTree = new TreeCopier<Object>(make).copy(tree);
Env<AttrContext> speculativeEnv = env.dup(newTree, env.info.dup(env.info.scope.dupUnshared()));
speculativeEnv.info.scope.owner = env.info.scope.owner;
- Filter<JCDiagnostic> prevDeferDiagsFilter = log.deferredDiagFilter;
- Queue<JCDiagnostic> prevDeferredDiags = log.deferredDiagnostics;
final JavaFileObject currentSource = log.currentSourceFile();
+ Log.DeferredDiagnosticHandler deferredDiagnosticHandler =
+ new Log.DeferredDiagnosticHandler(log, new Filter<JCDiagnostic>() {
+ public boolean accepts(JCDiagnostic t) {
+ return t.getDiagnosticSource().getFile().equals(currentSource);
+ }
+ });
try {
- log.deferredDiagnostics = new ListBuffer<JCDiagnostic>();
- log.deferredDiagFilter = new Filter<JCDiagnostic>() {
- public boolean accepts(JCDiagnostic t) {
- return t.getDiagnosticSource().getFile().equals(currentSource);
- }
- };
attr.attribTree(newTree, speculativeEnv, resultInfo);
unenterScanner.scan(newTree);
return newTree;
} catch (Abort ex) {
//if some very bad condition occurred during deferred attribution
//we should dump all errors before killing javac
- log.reportDeferredDiagnostics();
+ deferredDiagnosticHandler.reportDeferredDiagnostics();
throw ex;
} finally {
unenterScanner.scan(newTree);
- log.deferredDiagFilter = prevDeferDiagsFilter;
- log.deferredDiagnostics = prevDeferredDiags;
+ log.popDiagnosticHandler(deferredDiagnosticHandler);
}
}
//where