aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny van Bruggen <lol@meuk.info>2018-02-22 20:39:47 +0100
committerGitHub <noreply@github.com>2018-02-22 20:39:47 +0100
commit4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b (patch)
treee29c162faea9ea028eeca16ce005a499215add31
parentddc5ec420ac16cd8e815de352ed76b9c53b4eb45 (diff)
parent1eb12dd44d3c370f5d1ee5aeb368a6709e3b816b (diff)
downloadjavaparser-4d7b99a8a60e1d7d29836c4ce3ad5b125cb00a2b.tar.gz
Merge pull request #1429 from matozoid/issue_1427_hidden_dirs
Let SourceRoot skip unlikely directories
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java1
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/body/Parameter.java2
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/utils/SourceRoot.java57
-rw-r--r--javaparser-testing/src/test/resources/com/github/javaparser/utils/.abc/bla.java0
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