test/langtools/tools/lib/toolbox/JavacTask.java
changeset 49197 cc2673fa8c20
parent 47216 71c04702a3d5
child 49822 53aae0c219e6
--- a/test/langtools/tools/lib/toolbox/JavacTask.java	Fri Mar 09 11:36:12 2018 +0800
+++ b/test/langtools/tools/lib/toolbox/JavacTask.java	Fri Mar 09 09:42:10 2018 +0100
@@ -34,6 +34,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.tools.JavaCompiler;
@@ -58,6 +59,7 @@
     private List<String> files;
     private List<JavaFileObject> fileObjects;
     private JavaFileManager fileManager;
+    private Consumer<com.sun.source.util.JavacTask> callback;
 
     private JavaCompiler compiler;
     private StandardJavaFileManager internalFileManager;
@@ -254,6 +256,16 @@
     }
 
     /**
+     * Set a callback to be used by this task.
+     * @param callback the callback
+     * @return this task object
+     */
+    public JavacTask callback(Consumer<com.sun.source.util.JavacTask> callback) {
+        this.callback = callback;
+        return this;
+    }
+
+    /**
      * {@inheritDoc}
      * @return the name "javac"
      */
@@ -290,6 +302,9 @@
                     if (fileManager != null) {
                         throw new IllegalStateException("file manager set in CMDLINE mode");
                     }
+                    if (callback != null) {
+                        throw new IllegalStateException("callback set in CMDLINE mode");
+                    }
                     rc = runCommand(direct.pw);
                     break;
                 default:
@@ -333,7 +348,11 @@
                     allOpts,
                     classes,
                     allFiles);
-            return ((JavacTaskImpl) task).doCall().exitCode;
+            JavacTaskImpl taskImpl = (JavacTaskImpl) task;
+            if (callback != null) {
+                callback.accept(taskImpl);
+            }
+            return taskImpl.doCall().exitCode;
         } finally {
             if (internalFileManager != null)
                 internalFileManager.close();