< 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 >