From e97a19635407cbc7fe52c7e8a46e96e6a8ab3757 Mon Sep 17 00:00:00 2001 From: Naofal Date: Sat, 29 Mar 2025 21:02:13 +0300 Subject: [PATCH] Afford concurrency --- .../java/xyz/naofal/jtags/TagCollector.java | 20 +++++++++++++------ .../java/xyz/naofal/jtags/TreeVisitor.java | 8 +++----- .../xyz/naofal/jtags/TreeVisitorContext.java | 7 ++++--- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/xyz/naofal/jtags/TagCollector.java b/src/main/java/xyz/naofal/jtags/TagCollector.java index a067429..5f30eee 100644 --- a/src/main/java/xyz/naofal/jtags/TagCollector.java +++ b/src/main/java/xyz/naofal/jtags/TagCollector.java @@ -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 compilationUnits = fileManager.getJavaFileObjects(options.sources.toArray(String[]::new)); + logger.info("Parsing sources..."); JavacTask task = (JavacTask) compiler.getTask(null, fileManager, null, null, null, compilationUnits); Iterable 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 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; diff --git a/src/main/java/xyz/naofal/jtags/TreeVisitor.java b/src/main/java/xyz/naofal/jtags/TreeVisitor.java index 8dc1ba4..7aa9bcb 100644 --- a/src/main/java/xyz/naofal/jtags/TreeVisitor.java +++ b/src/main/java/xyz/naofal/jtags/TreeVisitor.java @@ -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 { public final Options options; - public final AbstractQueue tags = new PriorityBlockingQueue<>(); + public final AbstractQueue tags; - public TreeVisitor(Options options) { + public TreeVisitor(Options options, AbstractQueue 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); diff --git a/src/main/java/xyz/naofal/jtags/TreeVisitorContext.java b/src/main/java/xyz/naofal/jtags/TreeVisitorContext.java index b4ef522..23c5e84 100644 --- a/src/main/java/xyz/naofal/jtags/TreeVisitorContext.java +++ b/src/main/java/xyz/naofal/jtags/TreeVisitorContext.java @@ -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() {