Skip to content

Commit

Permalink
revising how JavaParserTypeSolver explore directories
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Jul 15, 2018
1 parent 04423e5 commit b96bf8f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
Expand Up @@ -126,7 +126,19 @@ private Optional<CompilationUnit> parse(Path srcFile) {
}
}

/**
* Note that this parse only files directly contained in this directory.
* It does not traverse recursively all children directory.
*/
private List<CompilationUnit> parseDirectory(Path srcDirectory) {
return parseDirectory(srcDirectory, false);
}

private List<CompilationUnit> parseDirectoryRecursively(Path srcDirectory) {
return parseDirectory(srcDirectory, true);
}

private List<CompilationUnit> parseDirectory(Path srcDirectory, boolean recursively) {
try {
return parsedDirectories.get(srcDirectory.toAbsolutePath(), () -> {
List<CompilationUnit> units = new ArrayList<>();
Expand All @@ -136,6 +148,8 @@ private List<CompilationUnit> parseDirectory(Path srcDirectory) {
.forEach(file -> {
if (file.getFileName().toString().toLowerCase().endsWith(".java")) {
parse(file).ifPresent(units::add);
} else if (recursively && file.toFile().isDirectory()) {
units.addAll(parseDirectoryRecursively(file));
}
});
}
Expand Down Expand Up @@ -197,8 +211,20 @@ private SymbolReference<ResolvedReferenceTypeDeclaration> tryToSolveTypeUncached
}

// If this is not possible we parse all files
// First we try just in the same package, for classes defined in a file not named as the class itself
// later we move to top directories until we get the root
{
List<CompilationUnit> compilationUnits = parseDirectory(srcFile.getParent());
for (CompilationUnit compilationUnit : compilationUnits) {
Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit, typeName.toString());
if (astTypeDeclaration.isPresent()) {
return SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get()));
}
}
}

{
List<CompilationUnit> compilationUnits = parseDirectory(srcDir);
List<CompilationUnit> compilationUnits = parseDirectoryRecursively(srcDir);
for (CompilationUnit compilationUnit : compilationUnits) {
Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit, typeName.toString());
if (astTypeDeclaration.isPresent()) {
Expand Down
Expand Up @@ -42,7 +42,6 @@ public class SymbolSolverTest extends AbstractTest {

@Before
public void setup() {

Path srcNewCode = adaptPath("src/test/test_sourcecode/javaparser_new_src/javaparser-core");
CombinedTypeSolver combinedTypeSolverNewCode = new CombinedTypeSolver();
combinedTypeSolverNewCode.add(new ReflectionTypeSolver());
Expand Down

0 comments on commit b96bf8f

Please sign in to comment.