diff options
author | Danny van Bruggen <lol@meuk.info> | 2018-02-22 20:39:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-22 20:39:47 +0100 |
commit | 4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b (patch) | |
tree | e29c162faea9ea028eeca16ce005a499215add31 | |
parent | ddc5ec420ac16cd8e815de352ed76b9c53b4eb45 (diff) | |
parent | 1eb12dd44d3c370f5d1ee5aeb368a6709e3b816b (diff) | |
download | platform_external_javaparser-4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b.tar.gz platform_external_javaparser-4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b.tar.bz2 platform_external_javaparser-4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b.zip |
Merge pull request #1429 from matozoid/issue_1427_hidden_dirs
Let SourceRoot skip unlikely directories
4 files changed, 41 insertions, 19 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java index 4ae9419fb..dc871e3cd 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java @@ -26,7 +26,6 @@ import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.expr.AnnotationExpr; import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations; import com.github.javaparser.ast.observer.ObservableProperty; - import static com.github.javaparser.utils.Utils.assertNotNull; import com.github.javaparser.ast.visitor.CloneVisitor; import com.github.javaparser.metamodel.BodyDeclarationMetaModel; diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/Parameter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/Parameter.java index 4c395a30e..a7cf357a2 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/Parameter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/Parameter.java @@ -38,9 +38,7 @@ import com.github.javaparser.ast.visitor.GenericVisitor; import com.github.javaparser.ast.visitor.VoidVisitor; import com.github.javaparser.metamodel.JavaParserMetaModel; import com.github.javaparser.metamodel.ParameterMetaModel; - import java.util.EnumSet; - import static com.github.javaparser.utils.Utils.assertNotNull; import javax.annotation.Generated; import com.github.javaparser.TokenRange; diff --git a/javaparser-core/src/main/java/com/github/javaparser/utils/SourceRoot.java b/javaparser-core/src/main/java/com/github/javaparser/utils/SourceRoot.java index a8a19a338..02a90ffec 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/utils/SourceRoot.java +++ b/javaparser-core/src/main/java/com/github/javaparser/utils/SourceRoot.java @@ -20,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; import java.util.function.Function; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.github.javaparser.ParseStart.COMPILATION_UNIT; @@ -28,14 +29,16 @@ import static com.github.javaparser.utils.CodeGenerationUtils.fileInPackageRelat import static com.github.javaparser.utils.CodeGenerationUtils.packageAbsolutePath; import static com.github.javaparser.utils.SourceRoot.Callback.Result.SAVE; import static com.github.javaparser.utils.Utils.assertNotNull; +import static java.nio.file.FileVisitResult.CONTINUE; +import static java.nio.file.FileVisitResult.SKIP_SUBTREE; /** * A collection of Java source files located in one directory and its subdirectories on the file system. Files can be * parsed and written back one by one or all together. <b>Note that</b> the internal cache used is thread-safe. * <ul> - * <li>methods called "tryToParse..." will return their result inside a "ParseResult", which supports parse successes and failures.</li> - * <li>methods called "parse..." will return "CompilationUnit"s. If a file fails to parse, an exception is thrown.</li> - * <li>methods ending in "...Parallelized" will speed up parsing by using multiple threads.</li> + * <li>methods called "tryToParse..." will return their result inside a "ParseResult", which supports parse successes and failures.</li> + * <li>methods called "parse..." will return "CompilationUnit"s. If a file fails to parse, an exception is thrown.</li> + * <li>methods ending in "...Parallelized" will speed up parsing by using multiple threads.</li> * </ul> */ public class SourceRoot { @@ -57,6 +60,7 @@ public class SourceRoot { private final Map<Path, ParseResult<CompilationUnit>> cache = new ConcurrentHashMap<>(); private ParserConfiguration parserConfiguration = new ParserConfiguration(); private Function<CompilationUnit, String> printer = new PrettyPrinter()::print; + private static final Pattern JAVA_IDENTIFIER = Pattern.compile("\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*"); public SourceRoot(Path root) { assertNotNull(root); @@ -143,12 +147,27 @@ public class SourceRoot { Path relative = root.relativize(file.getParent()); tryToParse(relative.toString(), file.getFileName().toString()); } - return FileVisitResult.CONTINUE; + return CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + return isSensibleDirectoryToEnter(dir) ? CONTINUE : SKIP_SUBTREE; } }); return getCache(); } + private static boolean isSensibleDirectoryToEnter(Path dir) throws IOException { + final String dirToEnter = dir.getFileName().toString(); + final boolean directoryIsAValidJavaIdentifier = JAVA_IDENTIFIER.matcher(dirToEnter).matches(); + if (Files.isHidden(dir) || !directoryIsAValidJavaIdentifier) { + Log.trace("Not processing directory \"%s\"", dirToEnter); + return false; + } + return true; + } + /** * Tries to parse all .java files under the source root recursively, and returns all files ever parsed with this * source root. It keeps track of all parsed files so you can write them out with a single saveAll() call. Note that @@ -170,7 +189,7 @@ public class SourceRoot { * * @param startPackage files in this package and deeper are parsed. Pass "" to parse all files. */ - public List<ParseResult<CompilationUnit>> tryToParseParallelized(String startPackage) throws IOException { + public List<ParseResult<CompilationUnit>> tryToParseParallelized(String startPackage) { assertNotNull(startPackage); logPackage(startPackage); final Path path = packageAbsolutePath(root, startPackage); @@ -181,12 +200,12 @@ public class SourceRoot { tryToParse( relative.toString(), file.getFileName().toString(), - new JavaParser(parserConfiguration)); + parserConfiguration); } catch (IOException e) { Log.error(e); } } - return FileVisitResult.CONTINUE; + return CONTINUE; }); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(parse); @@ -269,7 +288,12 @@ public class SourceRoot { } } } - return FileVisitResult.CONTINUE; + return CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + return isSensibleDirectoryToEnter(dir) ? CONTINUE : SKIP_SUBTREE; } }); return this; @@ -292,8 +316,7 @@ public class SourceRoot { * * @param startPackage files in this package and deeper are parsed. Pass "" to parse all files. */ - public SourceRoot parseParallelized(String startPackage, ParserConfiguration configuration, Callback callback) - throws IOException { + public SourceRoot parseParallelized(String startPackage, ParserConfiguration configuration, Callback callback) { assertNotNull(startPackage); assertNotNull(configuration); assertNotNull(callback); @@ -316,7 +339,7 @@ public class SourceRoot { Log.error(e); } } - return FileVisitResult.CONTINUE; + return CONTINUE; }); ForkJoinPool pool = new ForkJoinPool(); pool.invoke(parse); @@ -519,20 +542,22 @@ public class SourceRoot { try { Files.walkFileTree(path, new SimpleFileVisitor<Path>() { @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) - throws IOException { + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + if (!SourceRoot.isSensibleDirectoryToEnter(dir)) { + return SKIP_SUBTREE; + } if (!dir.equals(ParallelParse.this.path)) { ParallelParse w = new ParallelParse(dir, callback); w.fork(); walks.add(w); - return FileVisitResult.SKIP_SUBTREE; + return SKIP_SUBTREE; } else { - return FileVisitResult.CONTINUE; + return CONTINUE; } } @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { return callback.process(file, attrs); } }); diff --git a/javaparser-testing/src/test/resources/com/github/javaparser/utils/.abc/bla.java b/javaparser-testing/src/test/resources/com/github/javaparser/utils/.abc/bla.java new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/javaparser-testing/src/test/resources/com/github/javaparser/utils/.abc/bla.java |