Skip to content

Commit

Permalink
implemented caching of non-existence of files in JavaParserTypeSolver
Browse files Browse the repository at this point in the history
  • Loading branch information
mlangkabel committed Aug 17, 2017
1 parent 56d59ee commit fa01fa0
Showing 1 changed file with 27 additions and 19 deletions.
Expand Up @@ -41,9 +41,9 @@ public class JavaParserTypeSolver implements TypeSolver {


private TypeSolver parent; private TypeSolver parent;


private Map<String, CompilationUnit> parsedFiles = new HashMap<String, CompilationUnit>(); private Map<String, Optional<CompilationUnit>> parsedFiles = new HashMap<>();
private Map<String, List<CompilationUnit>> parsedDirectories = new HashMap<>(); private Map<String, List<CompilationUnit>> parsedDirectories = new HashMap<>();
private Map<String, ReferenceTypeDeclaration> foundTypes=new HashMap<>(); private Map<String, ReferenceTypeDeclaration> foundTypes = new HashMap<>();


public JavaParserTypeSolver(File srcDir) { public JavaParserTypeSolver(File srcDir) {
this.srcDir = srcDir; this.srcDir = srcDir;
Expand All @@ -68,21 +68,31 @@ public void setParent(TypeSolver parent) {
} }




private CompilationUnit parse(File srcFile) throws FileNotFoundException { private Optional<CompilationUnit> parse(File srcFile) {
if (!parsedFiles.containsKey(srcFile.getAbsolutePath())) { if (!parsedFiles.containsKey(srcFile.getAbsolutePath())) {
parsedFiles.put(srcFile.getAbsolutePath(), JavaParser.parse(srcFile)); Optional<CompilationUnit> cu;
try {
cu = Optional.of(JavaParser.parse(srcFile));
} catch (FileNotFoundException e) {
cu = Optional.empty();
}
parsedFiles.put(srcFile.getAbsolutePath(), cu);
} }
return parsedFiles.get(srcFile.getAbsolutePath()); return parsedFiles.get(srcFile.getAbsolutePath());
} }


private List<CompilationUnit> parseDirectory(File srcDirectory) throws FileNotFoundException { private List<CompilationUnit> parseDirectory(File srcDirectory) {
if (!parsedDirectories.containsKey(srcDirectory.getAbsolutePath())) { if (!parsedDirectories.containsKey(srcDirectory.getAbsolutePath())) {
List<CompilationUnit> units = new ArrayList<>(); List<CompilationUnit> units = new ArrayList<>();
File[] files = srcDirectory.listFiles(); File[] files = srcDirectory.listFiles();
if (files == null) throw new FileNotFoundException(srcDirectory.getAbsolutePath()); if (files != null) {
for (File file : files) { for (File file : files) {
if (file.getName().toLowerCase().endsWith(".java")) { if (file.getName().toLowerCase().endsWith(".java")) {
units.add(parse(file)); Optional<CompilationUnit> unit = parse(file);
if (unit.isPresent()) {
units.add(unit.get());
}
}
} }
} }
parsedDirectories.put(srcDirectory.getAbsolutePath(), units); parsedDirectories.put(srcDirectory.getAbsolutePath(), units);
Expand Down Expand Up @@ -129,26 +139,24 @@ private SymbolReference<ReferenceTypeDeclaration> tryToSolveTypeUncached(String
} }


File srcFile = new File(filePath); File srcFile = new File(filePath);
try { {
CompilationUnit compilationUnit = parse(srcFile); Optional<CompilationUnit> compilationUnit = parse(srcFile);
Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit, typeName); if (compilationUnit.isPresent()) {
if (astTypeDeclaration.isPresent()) { Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit.get(), typeName);
return SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get())); if (astTypeDeclaration.isPresent()) {
return SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get()));
}
} }
} catch (FileNotFoundException e) {
// Ignore
} }


try { {
List<CompilationUnit> compilationUnits = parseDirectory(srcFile.getParentFile()); List<CompilationUnit> compilationUnits = parseDirectory(srcFile.getParentFile());
for (CompilationUnit compilationUnit : compilationUnits) { for (CompilationUnit compilationUnit : compilationUnits) {
Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit, typeName); Optional<com.github.javaparser.ast.body.TypeDeclaration<?>> astTypeDeclaration = Navigator.findType(compilationUnit, typeName);
if (astTypeDeclaration.isPresent()) { if (astTypeDeclaration.isPresent()) {
return SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get())); return SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get()));
} }
} }
} catch (FileNotFoundException e) {
// Ignore
} }
} }


Expand Down

0 comments on commit fa01fa0

Please sign in to comment.