From 2d3d4b4de48727707b8f55215653f1e1cf3e2df0 Mon Sep 17 00:00:00 2001 From: Naofal Date: Wed, 26 Mar 2025 21:46:29 +0300 Subject: [PATCH] Use relative paths by default Fix filtering interface methods Get relative path from tag file --- Build.java | 10 +++++++--- src/main/java/xyz/naofal/jtags/Jtags.java | 5 ++--- src/main/java/xyz/naofal/jtags/TagsWriter.java | 3 +-- src/main/java/xyz/naofal/jtags/TreeVisitor.java | 17 ++++++++--------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Build.java b/Build.java index 67e89cf..e4bb166 100644 --- a/Build.java +++ b/Build.java @@ -56,9 +56,13 @@ public class Build { } static void buildJtags(String mainClass, String[] sourcePaths, String[] classPaths) { - if (classNeedsRebuild(mainClass, sourcePaths)) { - logger.info("Compiling %s...".formatted(program)); - compileJava(classPaths, sourcePaths); + if (!classNeedsRebuild(mainClass, sourcePaths)) { + return; + } + + logger.info("Compiling %s...".formatted(program)); + if (!compileJava(classPaths, sourcePaths)) { + System.exit(1); } } diff --git a/src/main/java/xyz/naofal/jtags/Jtags.java b/src/main/java/xyz/naofal/jtags/Jtags.java index 708c2c5..c858ffd 100644 --- a/src/main/java/xyz/naofal/jtags/Jtags.java +++ b/src/main/java/xyz/naofal/jtags/Jtags.java @@ -11,7 +11,7 @@ import java.util.List; public class Jtags { static class Options { List sources = new ArrayList<>(); - Path output = Path.of("tags"); + Path output = Path.of(".", "tags"); boolean absolutePaths = false; boolean excludeNonPublic = false; boolean excludeAnonymous = false; @@ -91,7 +91,6 @@ public class Jtags { case "-lib": logger.config("Third-party library mode"); - options.absolutePaths = true; options.excludeNonPublic = true; options.excludeAnonymous = true; break; @@ -139,7 +138,7 @@ Usage: jtags [options] Options: -o, -output Write tags to specified -lib Treat sources as third-party libraries - (alias for -absolute -no-non-public -no-anonymous) + (alias for -no-non-public -no-anonymous) -no-anonymous Exclude anonymous classes -no-non-public Exclude non-public elements -absolute Use absolute paths for tag locations diff --git a/src/main/java/xyz/naofal/jtags/TagsWriter.java b/src/main/java/xyz/naofal/jtags/TagsWriter.java index 0fb4fa9..6af902d 100644 --- a/src/main/java/xyz/naofal/jtags/TagsWriter.java +++ b/src/main/java/xyz/naofal/jtags/TagsWriter.java @@ -9,7 +9,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; -import java.nio.file.Path; import java.util.PriorityQueue; import xyz.naofal.jtags.Jtags.Options; @@ -47,7 +46,7 @@ public record TagsWriter(Options options) { writer.write( options().absolutePaths ? tag.location().toString() - : Path.of(".").toAbsolutePath().relativize(tag.location()).toString()); + : options.output.getParent().toAbsolutePath().relativize(tag.location()).toString()); writer.write("\t/^"); writer.write(tag.line().substring(0, Math.min(tag.line().length(), MAX_PATTERN_LENGTH))); writer.write("$/;\"\t"); diff --git a/src/main/java/xyz/naofal/jtags/TreeVisitor.java b/src/main/java/xyz/naofal/jtags/TreeVisitor.java index 7d4dd5d..a70c922 100644 --- a/src/main/java/xyz/naofal/jtags/TreeVisitor.java +++ b/src/main/java/xyz/naofal/jtags/TreeVisitor.java @@ -104,7 +104,11 @@ public class TreeVisitor extends TreePathScanner { @Override public Void visitMethod(MethodTree node, TreeVisitorContext p) { - if (options.excludeNonPublic && !node.getModifiers().getFlags().contains(Modifier.PUBLIC)) { + ClassTree enclosingType = (ClassTree)getCurrentPath().getParentPath().getLeaf(); + + if (options.excludeNonPublic + && !node.getModifiers().getFlags().contains(Modifier.PUBLIC) + && enclosingType.getKind() != Tree.Kind.INTERFACE) { return null; } @@ -116,14 +120,9 @@ public class TreeVisitor extends TreePathScanner { } if (options.fields.contains(TagField.EnclosingType.class)) { - for (var path : getCurrentPath().getParentPath()) { - if (path instanceof ClassTree classTree) { - fields.add( - new TagField.EnclosingType( - classTree.getSimpleName().toString(), getTypeKind(classTree))); - break; - } - } + fields.add( + new TagField.EnclosingType( + enclosingType.getSimpleName().toString(), getTypeKind(enclosingType))); } Tag tag =