equal
deleted
inserted
replaced
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)) { |