diff -r 82a3005cb038 -r cc2673fa8c20 src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Mar 09 11:36:12 2018 +0800 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Mar 09 09:42:10 2018 +0100 @@ -52,6 +52,7 @@ 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.*; @@ -177,6 +178,7 @@ private MultiTaskListener taskListener; private final Symtab symtab; + private final DeferredCompletionFailureHandler dcfh; private final Names names; private final Enter enter; private final Completer initialCompleter; @@ -227,6 +229,7 @@ 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(); @@ -665,10 +668,12 @@ private ArrayList supportedAnnotationPatterns; private ArrayList 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); @@ -692,6 +697,8 @@ throw e; } catch (Throwable t) { throw new AnnotationProcessingError(t); + } finally { + dcfh.setHandler(prevDeferredHandler); } } @@ -767,7 +774,8 @@ 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; @@ -959,6 +967,7 @@ private boolean callProcessor(Processor proc, Set tes, RoundEnvironment renv) { + Handler prevDeferredHandler = dcfh.setHandler(dcfh.userCodeHandler); try { return proc.process(tes, renv); } catch (ClassFinder.BadClassFile ex) { @@ -973,6 +982,8 @@ throw e; } catch (Throwable t) { throw new AnnotationProcessingError(t); + } finally { + dcfh.setHandler(prevDeferredHandler); } }