src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
changeset 49197 cc2673fa8c20
parent 47216 71c04702a3d5
child 49822 53aae0c219e6
equal deleted inserted replaced
49196:82a3005cb038 49197:cc2673fa8c20
    36 import javax.lang.model.element.TypeElement;
    36 import javax.lang.model.element.TypeElement;
    37 import javax.tools.*;
    37 import javax.tools.*;
    38 
    38 
    39 import com.sun.source.tree.*;
    39 import com.sun.source.tree.*;
    40 import com.sun.tools.javac.code.*;
    40 import com.sun.tools.javac.code.*;
       
    41 import com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler;
    41 import com.sun.tools.javac.code.Symbol.ClassSymbol;
    42 import com.sun.tools.javac.code.Symbol.ClassSymbol;
    42 import com.sun.tools.javac.comp.*;
    43 import com.sun.tools.javac.comp.*;
    43 import com.sun.tools.javac.file.BaseFileManager;
    44 import com.sun.tools.javac.file.BaseFileManager;
    44 import com.sun.tools.javac.main.*;
    45 import com.sun.tools.javac.main.*;
    45 import com.sun.tools.javac.main.JavaCompiler;
    46 import com.sun.tools.javac.main.JavaCompiler;
    70  */
    71  */
    71 public class JavacTaskImpl extends BasicJavacTask {
    72 public class JavacTaskImpl extends BasicJavacTask {
    72     private final Arguments args;
    73     private final Arguments args;
    73     private JavaCompiler compiler;
    74     private JavaCompiler compiler;
    74     private JavaFileManager fileManager;
    75     private JavaFileManager fileManager;
       
    76     private DeferredCompletionFailureHandler dcfh;
    75     private Locale locale;
    77     private Locale locale;
    76     private Map<JavaFileObject, JCCompilationUnit> notYetEntered;
    78     private Map<JavaFileObject, JCCompilationUnit> notYetEntered;
    77     private ListBuffer<Env<AttrContext>> genList;
    79     private ListBuffer<Env<AttrContext>> genList;
    78     private final AtomicBoolean used = new AtomicBoolean();
    80     private final AtomicBoolean used = new AtomicBoolean();
    79     private Iterable<? extends Processor> processors;
    81     private Iterable<? extends Processor> processors;
    81 
    83 
    82     protected JavacTaskImpl(Context context) {
    84     protected JavacTaskImpl(Context context) {
    83         super(context, true);
    85         super(context, true);
    84         args = Arguments.instance(context);
    86         args = Arguments.instance(context);
    85         fileManager = context.get(JavaFileManager.class);
    87         fileManager = context.get(JavaFileManager.class);
       
    88         dcfh = DeferredCompletionFailureHandler.instance(context);
       
    89         dcfh.setHandler(dcfh.userCodeHandler);
    86     }
    90     }
    87 
    91 
    88     @Override @DefinedBy(Api.COMPILER)
    92     @Override @DefinedBy(Api.COMPILER)
    89     public Boolean call() {
    93     public Boolean call() {
    90         return doCall().isOK();
    94         return doCall().isOK();
   136             throw new IllegalStateException();
   140             throw new IllegalStateException();
   137         this.locale = locale;
   141         this.locale = locale;
   138     }
   142     }
   139 
   143 
   140     private <T> T handleExceptions(Callable<T> c, T sysErrorResult, T abnormalErrorResult) {
   144     private <T> T handleExceptions(Callable<T> c, T sysErrorResult, T abnormalErrorResult) {
       
   145         Handler prevDeferredHandler = dcfh.setHandler(dcfh.javacCodeHandler);
   141         try {
   146         try {
   142             return c.call();
   147             return c.call();
   143         } catch (FatalError ex) {
   148         } catch (FatalError ex) {
   144             Log log = Log.instance(context);
   149             Log log = Log.instance(context);
   145             Options options = Options.instance(context);
   150             Options options = Options.instance(context);
   169                 Log log = Log.instance(context);
   174                 Log log = Log.instance(context);
   170                 log.printLines(PrefixKind.JAVAC, "msg.bug", JavaCompiler.version());
   175                 log.printLines(PrefixKind.JAVAC, "msg.bug", JavaCompiler.version());
   171                 ex.printStackTrace(log.getWriter(WriterKind.NOTICE));
   176                 ex.printStackTrace(log.getWriter(WriterKind.NOTICE));
   172             }
   177             }
   173             return abnormalErrorResult;
   178             return abnormalErrorResult;
       
   179         } finally {
       
   180             dcfh.setHandler(prevDeferredHandler);
   174         }
   181         }
   175     }
   182     }
   176 
   183 
   177     private void prepareCompiler(boolean forParse) {
   184     private void prepareCompiler(boolean forParse) {
   178         if (used.getAndSet(true)) {
   185         if (used.getAndSet(true)) {