--- 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();