< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/api/MultiTaskListener.java

Print this page
rev 48841 : [mq]: 8187950

*** 28,37 **** --- 28,39 ---- import java.util.Arrays; import java.util.Collection; import com.sun.source.util.TaskEvent; import com.sun.source.util.TaskListener; + import com.sun.tools.javac.code.DeferredCompletionFailureHandler; + import com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; /**
*** 48,57 **** --- 50,61 ---- public static final Context.Key<MultiTaskListener> taskListenerKey = new Context.Key<>(); /** Empty array of task listeners */ private static final TaskListener[] EMPTY_LISTENERS = new TaskListener[0]; + private final DeferredCompletionFailureHandler dcfh; + /** Get the MultiTaskListener instance for this context. */ public static MultiTaskListener instance(Context context) { MultiTaskListener instance = context.get(taskListenerKey); if (instance == null) instance = new MultiTaskListener(context);
*** 59,68 **** --- 63,73 ---- } protected MultiTaskListener(Context context) { context.put(taskListenerKey, this); ccw = ClientCodeWrapper.instance(context); + dcfh = DeferredCompletionFailureHandler.instance(context); } /** * The current set of registered listeners. * This is a mutable reference to an immutable array.
*** 104,125 **** --- 109,140 ---- } } @Override @DefinedBy(Api.COMPILER_TREE) public void started(TaskEvent e) { + Handler prevDeferredHandler = dcfh.setHandler(dcfh.userCodeHandler); + try { // guard against listeners being updated by a listener TaskListener[] ll = this.listeners; for (TaskListener l: ll) l.started(e); + } finally { + dcfh.setHandler(prevDeferredHandler); + } } @Override @DefinedBy(Api.COMPILER_TREE) public void finished(TaskEvent e) { + Handler prevDeferredHandler = dcfh.setHandler(dcfh.userCodeHandler); + try { // guard against listeners being updated by a listener TaskListener[] ll = this.listeners; for (TaskListener l: ll) l.finished(e); + } finally { + dcfh.setHandler(prevDeferredHandler); + } } @Override public String toString() { return Arrays.toString(listeners);
< prev index next >