8250217: com.sun.tools.javac.api.JavacTaskImpl swallows compiler exceptions potentially producing false positive test results
Reviewed-by: jlahoda
This commit is contained in:
parent
5166094647
commit
433394203d
@ -97,13 +97,18 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
/* Internal version of call exposing Main.Result. */
|
||||
public Main.Result doCall() {
|
||||
try {
|
||||
return handleExceptions(() -> {
|
||||
Pair<Main.Result, Throwable> result = invocationHelper(() -> {
|
||||
prepareCompiler(false);
|
||||
if (compiler.errorCount() > 0)
|
||||
return Main.Result.ERROR;
|
||||
compiler.compile(args.getFileObjects(), args.getClassNames(), processors, addModules);
|
||||
return (compiler.errorCount() > 0) ? Main.Result.ERROR : Main.Result.OK; // FIXME?
|
||||
}, Main.Result.SYSERR, Main.Result.ABNORMAL);
|
||||
});
|
||||
if (result.snd == null) {
|
||||
return result.fst;
|
||||
} else {
|
||||
return (result.snd instanceof FatalError) ? Main.Result.SYSERR : Main.Result.ABNORMAL;
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
cleanup();
|
||||
@ -141,10 +146,10 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
private <T> T handleExceptions(Callable<T> c, T sysErrorResult, T abnormalErrorResult) {
|
||||
private <T> Pair<T, Throwable> invocationHelper(Callable<T> c) {
|
||||
Handler prevDeferredHandler = dcfh.setHandler(dcfh.javacCodeHandler);
|
||||
try {
|
||||
return c.call();
|
||||
return new Pair<>(c.call(), null);
|
||||
} catch (FatalError ex) {
|
||||
Log log = Log.instance(context);
|
||||
Options options = Options.instance(context);
|
||||
@ -152,7 +157,7 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
if (ex.getCause() != null && options.isSet("dev")) {
|
||||
ex.getCause().printStackTrace(log.getWriter(WriterKind.NOTICE));
|
||||
}
|
||||
return sysErrorResult;
|
||||
return new Pair<>(null, ex);
|
||||
} catch (AnnotationProcessingError | ClientCodeException e) {
|
||||
// AnnotationProcessingError is thrown from JavacProcessingEnvironment,
|
||||
// to forward errors thrown from an annotation processor
|
||||
@ -175,7 +180,7 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
log.printLines(PrefixKind.JAVAC, "msg.bug", JavaCompiler.version());
|
||||
ex.printStackTrace(log.getWriter(WriterKind.NOTICE));
|
||||
}
|
||||
return abnormalErrorResult;
|
||||
return new Pair<>(null, ex);
|
||||
} finally {
|
||||
dcfh.setHandler(prevDeferredHandler);
|
||||
}
|
||||
@ -240,7 +245,11 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
|
||||
@Override @DefinedBy(Api.COMPILER_TREE)
|
||||
public Iterable<? extends CompilationUnitTree> parse() {
|
||||
return handleExceptions(this::parseInternal, List.nil(), List.nil());
|
||||
Pair<Iterable<? extends CompilationUnitTree>, Throwable> result = invocationHelper(this::parseInternal);
|
||||
if (result.snd == null) {
|
||||
return result.fst;
|
||||
}
|
||||
throw new IllegalStateException(result.snd);
|
||||
}
|
||||
|
||||
private Iterable<? extends CompilationUnitTree> parseInternal() {
|
||||
@ -367,7 +376,11 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
|
||||
@Override @DefinedBy(Api.COMPILER_TREE)
|
||||
public Iterable<? extends Element> analyze() {
|
||||
return handleExceptions(() -> analyze(null), List.nil(), List.nil());
|
||||
Pair<Iterable<? extends Element>, Throwable> result = invocationHelper(() -> analyze(null));
|
||||
if (result.snd == null) {
|
||||
return result.fst;
|
||||
}
|
||||
throw new IllegalStateException(result.snd);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -429,7 +442,11 @@ public class JavacTaskImpl extends BasicJavacTask {
|
||||
|
||||
@Override @DefinedBy(Api.COMPILER_TREE)
|
||||
public Iterable<? extends JavaFileObject> generate() {
|
||||
return handleExceptions(() -> generate(null), List.nil(), List.nil());
|
||||
Pair<Iterable<? extends JavaFileObject>, Throwable> result = invocationHelper(() -> generate(null));
|
||||
if (result.snd == null) {
|
||||
return result.fst;
|
||||
}
|
||||
throw new IllegalStateException(result.snd);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,7 +189,7 @@ public class Processor extends AbstractProcessor {
|
||||
}
|
||||
|
||||
@Override public boolean isNameCompatible(String simpleName, Kind kind) {
|
||||
return true;
|
||||
return simpleName.equals("Source") && kind == Kind.SOURCE;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user