< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/api/MultiTaskListener.java
Print this page
rev 48841 : imported patch 8187950
@@ -28,10 +28,12 @@
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,10 +50,12 @@
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,10 +63,11 @@
}
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,22 +109,32 @@
}
}
@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 >