< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
Print this page
rev 48841 : imported patch 8187950
@@ -36,10 +36,11 @@
import javax.lang.model.element.TypeElement;
import javax.tools.*;
import com.sun.source.tree.*;
import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.comp.*;
import com.sun.tools.javac.file.BaseFileManager;
import com.sun.tools.javac.main.*;
import com.sun.tools.javac.main.JavaCompiler;
@@ -70,10 +71,11 @@
*/
public class JavacTaskImpl extends BasicJavacTask {
private final Arguments args;
private JavaCompiler compiler;
private JavaFileManager fileManager;
+ private DeferredCompletionFailureHandler dcfh;
private Locale locale;
private Map<JavaFileObject, JCCompilationUnit> notYetEntered;
private ListBuffer<Env<AttrContext>> genList;
private final AtomicBoolean used = new AtomicBoolean();
private Iterable<? extends Processor> processors;
@@ -81,10 +83,12 @@
protected JavacTaskImpl(Context context) {
super(context, true);
args = Arguments.instance(context);
fileManager = context.get(JavaFileManager.class);
+ dcfh = DeferredCompletionFailureHandler.instance(context);
+ dcfh.setHandler(dcfh.userCodeHandler);
}
@Override @DefinedBy(Api.COMPILER)
public Boolean call() {
return doCall().isOK();
@@ -136,10 +140,11 @@
throw new IllegalStateException();
this.locale = locale;
}
private <T> T handleExceptions(Callable<T> c, T sysErrorResult, T abnormalErrorResult) {
+ Handler prevDeferredHandler = dcfh.setHandler(dcfh.javacCodeHandler);
try {
return c.call();
} catch (FatalError ex) {
Log log = Log.instance(context);
Options options = Options.instance(context);
@@ -169,10 +174,12 @@
Log log = Log.instance(context);
log.printLines(PrefixKind.JAVAC, "msg.bug", JavaCompiler.version());
ex.printStackTrace(log.getWriter(WriterKind.NOTICE));
}
return abnormalErrorResult;
+ } finally {
+ dcfh.setHandler(prevDeferredHandler);
}
}
private void prepareCompiler(boolean forParse) {
if (used.getAndSet(true)) {
< prev index next >