diff -r 82a3005cb038 -r cc2673fa8c20 test/langtools/tools/lib/toolbox/JavacTask.java --- 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 files; private List fileObjects; private JavaFileManager fileManager; + private Consumer 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 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();