< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
Print this page
rev 48841 : [mq]: 8187950
@@ -50,10 +50,11 @@
import static javax.tools.StandardLocation.*;
import com.sun.source.util.TaskEvent;
import com.sun.tools.javac.api.MultiTaskListener;
import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler;
import com.sun.tools.javac.code.Scope.WriteableScope;
import com.sun.tools.javac.code.Source.Feature;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.ClassType;
import com.sun.tools.javac.code.Types;
@@ -175,10 +176,11 @@
*/
private JavacMessages messages;
private MultiTaskListener taskListener;
private final Symtab symtab;
+ private final DeferredCompletionFailureHandler dcfh;
private final Names names;
private final Enter enter;
private final Completer initialCompleter;
private final Check chk;
@@ -225,10 +227,11 @@
processorOptions = initProcessorOptions();
unmatchedProcessorOptions = initUnmatchedProcessorOptions();
messages = JavacMessages.instance(context);
taskListener = MultiTaskListener.instance(context);
symtab = Symtab.instance(context);
+ dcfh = DeferredCompletionFailureHandler.instance(context);
names = Names.instance(context);
enter = Enter.instance(context);
initialCompleter = ClassFinder.instance(context).getCompleter();
chk = Check.instance(context);
initProcessorLoader();
@@ -663,14 +666,16 @@
public Processor processor;
public boolean contributed;
private ArrayList<Pattern> supportedAnnotationPatterns;
private ArrayList<String> supportedOptionNames;
- ProcessorState(Processor p, Log log, Source source, boolean allowModules, ProcessingEnvironment env) {
+ ProcessorState(Processor p, Log log, Source source, DeferredCompletionFailureHandler dcfh,
+ boolean allowModules, ProcessingEnvironment env) {
processor = p;
contributed = false;
+ Handler prevDeferredHandler = dcfh.setHandler(dcfh.userCodeHandler);
try {
processor.init(env);
checkSourceVersionCompatibility(source, log);
@@ -690,10 +695,12 @@
} catch (ClientCodeException e) {
throw e;
} catch (Throwable t) {
throw new AnnotationProcessingError(t);
+ } finally {
+ dcfh.setHandler(prevDeferredHandler);
}
}
/**
* Checks whether or not a processor's source version is
@@ -765,11 +772,12 @@
onProcInterator = true;
}
if (psi.processorIterator.hasNext()) {
ProcessorState ps = new ProcessorState(psi.processorIterator.next(),
- log, source, Feature.MODULES.allowedInSource(source),
+ log, source, dcfh,
+ Feature.MODULES.allowedInSource(source),
JavacProcessingEnvironment.this);
psi.procStateList.add(ps);
return ps;
} else
throw new NoSuchElementException();
@@ -957,10 +965,11 @@
}
private boolean callProcessor(Processor proc,
Set<? extends TypeElement> tes,
RoundEnvironment renv) {
+ Handler prevDeferredHandler = dcfh.setHandler(dcfh.userCodeHandler);
try {
return proc.process(tes, renv);
} catch (ClassFinder.BadClassFile ex) {
log.error(Errors.ProcCantAccess1(ex.sym, ex.getDetailValue()));
return false;
@@ -971,10 +980,12 @@
return false;
} catch (ClientCodeException e) {
throw e;
} catch (Throwable t) {
throw new AnnotationProcessingError(t);
+ } finally {
+ dcfh.setHandler(prevDeferredHandler);
}
}
/**
* Helper object for a single round of annotation processing.
< prev index next >