Afford concurrency

This commit is contained in:
2025-03-29 21:02:13 +03:00
parent e782d88f37
commit e97a196354
3 changed files with 21 additions and 14 deletions

View File

@@ -5,8 +5,11 @@ import static xyz.naofal.jtags.JtagsLogger.logger;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.util.JavacTask;
import com.sun.source.util.Trees;
import java.io.IOException;
import java.util.AbstractQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
@@ -23,20 +26,25 @@ public class TagCollector {
Iterable<? extends JavaFileObject> compilationUnits =
fileManager.getJavaFileObjects(options.sources.toArray(String[]::new));
logger.info("Parsing sources...");
JavacTask task =
(JavacTask) compiler.getTask(null, fileManager, null, null, null, compilationUnits);
Iterable<? extends CompilationUnitTree> trees = task.parse();
TreeVisitor treeVisitor = new TreeVisitor(options);
TreeVisitorContext context = new TreeVisitorContext(Trees.instance(task));
logger.info("Collecting tags...");
Trees treeUtils = Trees.instance(task);
AbstractQueue<Tag> tags = new PriorityBlockingQueue<>();
TreeVisitor treeVisitor = new TreeVisitor(options, tags);
for (CompilationUnitTree compilationUnitTree : trees) {
treeVisitor.scan(compilationUnitTree, context);
TreeVisitorContext context = new TreeVisitorContext(compilationUnitTree, treeUtils);
treeVisitor.scan(compilationUnitTree, context);
}
return treeVisitor.tags;
return tags;
} catch (IOException ex) {
} catch (Exception ex) {
logger.severe(ex.toString());
System.exit(1);
return null;

View File

@@ -13,22 +13,20 @@ import java.util.AbstractQueue;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.PriorityBlockingQueue;
import javax.lang.model.element.Modifier;
import xyz.naofal.jtags.Jtags.Options;
public class TreeVisitor extends TreePathScanner<Void, TreeVisitorContext> {
public final Options options;
public final AbstractQueue<Tag> tags = new PriorityBlockingQueue<>();
public final AbstractQueue<Tag> tags;
public TreeVisitor(Options options) {
public TreeVisitor(Options options, AbstractQueue<Tag> tagQueue) {
this.options = options;
this.tags = tagQueue;
}
@Override
public Void visitCompilationUnit(CompilationUnitTree node, TreeVisitorContext p) {
p.compilationUnitTree = node;
logger.fine(() -> "Collecting tags in file: " + p.getLocation());
return scan(node.getTypeDecls(), p);

View File

@@ -16,11 +16,12 @@ import java.util.Optional;
public class TreeVisitorContext {
final Trees trees;
final SourcePositions sourcePositions;
public CompilationUnitTree compilationUnitTree;
final CompilationUnitTree compilationUnitTree;
public TreeVisitorContext(Trees trees) {
public TreeVisitorContext(CompilationUnitTree compilationUnitTree, Trees trees) {
this.compilationUnitTree = compilationUnitTree;
this.trees = trees;
sourcePositions = trees.getSourcePositions();
this.sourcePositions = trees.getSourcePositions();
}
public Path getLocation() {