< 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 >