mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8187950: javax.lang.model APIs throws CompletionFailure or a subtype of CompletionFailure
Catching CompletionFailures that would be thrown to API clients, and re-completing the symbols again when javac itself needs it. Reviewed-by: cushon, jjg
This commit is contained in:
parent
798b830ad8
commit
b0b8a51be1
22 changed files with 1010 additions and 80 deletions
|
@ -34,6 +34,7 @@ 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;
|
||||
|
@ -58,6 +59,7 @@ public class JavacTask extends AbstractTask<JavacTask> {
|
|||
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;
|
||||
|
@ -253,6 +255,16 @@ public class JavacTask extends AbstractTask<JavacTask> {
|
|||
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"
|
||||
|
@ -290,6 +302,9 @@ public class JavacTask extends AbstractTask<JavacTask> {
|
|||
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 @@ public class JavacTask extends AbstractTask<JavacTask> {
|
|||
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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue