< prev index next >

test/langtools/tools/lib/toolbox/JavacTask.java

Print this page
rev 48841 : imported patch 8187950

@@ -32,10 +32,11 @@
 import java.util.Arrays;
 import java.util.Collections;
 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;
 import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;

@@ -56,10 +57,11 @@
     private List<String> options;
     private List<String> classes;
     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;
 
     /**

@@ -252,10 +254,20 @@
         this.fileManager = fileManager;
         return this;
     }
 
     /**
+     * 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"
      */
     @Override
     public String name() {

@@ -288,10 +300,13 @@
                     break;
                 case CMDLINE:
                     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:
                     throw new IllegalStateException("unknown mode " + mode);
             }

@@ -331,11 +346,15 @@
                     fileManager,
                     null,  // diagnostic listener; should optionally collect diags
                     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();
         }
     }
< prev index next >