|
|
@@ -7,8 +7,12 @@ import java.nio.file.Paths;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
-import javax.tools.*;
|
|
|
+import javax.tools.Diagnostic;
|
|
|
+import javax.tools.DiagnosticCollector;
|
|
|
+import javax.tools.JavaCompiler;
|
|
|
import javax.tools.JavaCompiler.CompilationTask;
|
|
|
+import javax.tools.StandardJavaFileManager;
|
|
|
+import javax.tools.ToolProvider;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
|
@@ -30,30 +34,29 @@ public class JavacAdapter {
|
|
|
try (final StandardJavaFileManager fileManager = javac.getStandardFileManager(listener, null, StandardCharsets.UTF_8)) {
|
|
|
var javaFiles = fileManager.getJavaFileObjectsFromFiles(pathedFiles);
|
|
|
|
|
|
- // We need to disable annotation processing
|
|
|
- // See
|
|
|
+ // We need to disable annotation processing, see
|
|
|
// https://stackoverflow.com/questions/72737445/system-java-compiler-behaves-different-depending-on-dependencies-defined-in-mave
|
|
|
final CompilationTask task = javac.getTask(null, fileManager, listener, List.of("-proc:none"), null, javaFiles);
|
|
|
final Trees trees = Trees.instance(task);
|
|
|
final SourcePositions positions = trees.getSourcePositions();
|
|
|
- for (final CompilationUnitTree ast : executeCompilationTask(task)) {
|
|
|
+ for (final CompilationUnitTree ast : executeCompilationTask(task, parser.logger)) {
|
|
|
final String filename = fileNameOf(directory, ast);
|
|
|
final LineMap map = ast.getLineMap();
|
|
|
ast.accept(new TokenGeneratingTreeScanner(filename, parser, map, positions, ast), null);
|
|
|
parser.add(Token.fileEnd(filename));
|
|
|
}
|
|
|
- } catch (IOException e) {
|
|
|
- parser.logger.error(e.getMessage(), e);
|
|
|
+ } catch (IOException exception) {
|
|
|
+ parser.logger.error(exception.getMessage(), exception);
|
|
|
}
|
|
|
return processErrors(parser.logger, listener);
|
|
|
}
|
|
|
|
|
|
- private Iterable<? extends CompilationUnitTree> executeCompilationTask(final CompilationTask task) {
|
|
|
+ private Iterable<? extends CompilationUnitTree> executeCompilationTask(final CompilationTask task, Logger logger) {
|
|
|
Iterable<? extends CompilationUnitTree> abstractSyntaxTrees = Collections.emptyList();
|
|
|
try {
|
|
|
abstractSyntaxTrees = ((JavacTask) task).parse();
|
|
|
} catch (IOException exception) {
|
|
|
- exception.printStackTrace();
|
|
|
+ logger.error(exception.getMessage(), exception);
|
|
|
}
|
|
|
return abstractSyntaxTrees;
|
|
|
}
|