  Line 72) parsedFiles.containsKey(srcFile.getAbsolutePath()) ==> java.util.Map.containsKey(java.lang.Object)
  Line 72) srcFile.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 73) parsedFiles.put(srcFile.getAbsolutePath(), JavaParser.parse(srcFile)) ==> java.util.Map.put(K, V)
  Line 73) srcFile.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 73) JavaParser.parse(srcFile) ==> com.github.javaparser.JavaParser.parse(java.io.File)
  Line 75) parsedFiles.get(srcFile.getAbsolutePath()) ==> java.util.Map.get(java.lang.Object)
  Line 75) srcFile.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 79) parsedDirectories.containsKey(srcDirectory.getAbsolutePath()) ==> java.util.Map.containsKey(java.lang.Object)
  Line 79) srcDirectory.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 81) srcDirectory.listFiles() ==> java.io.File.listFiles()
  Line 82) srcDirectory.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 84) file.getName().toLowerCase().endsWith(".java") ==> java.lang.String.endsWith(java.lang.String)
  Line 84) file.getName().toLowerCase() ==> java.lang.String.toLowerCase()
  Line 84) file.getName() ==> java.io.File.getName()
  Line 85) units.add(parse(file)) ==> java.util.List.add(E)
  Line 85) parse(file) ==> com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver.parse(java.io.File)
  Line 88) parsedDirectories.put(srcDirectory.getAbsolutePath(), units) ==> java.util.Map.put(K, V)
  Line 88) srcDirectory.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 91) parsedDirectories.get(srcDirectory.getAbsolutePath()) ==> java.util.Map.get(java.lang.Object)
  Line 91) srcDirectory.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 96) srcDir.exists() ==> java.io.File.exists()
  Line 96) srcDir.isDirectory() ==> java.io.File.isDirectory()
  Line 97) srcDir.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 102) foundTypes.containsKey(name) ==> java.util.Map.containsKey(java.lang.Object)
  Line 103) SymbolReference.solved(foundTypes.get(name)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 103) foundTypes.get(name) ==> java.util.Map.get(java.lang.Object)
  Line 105) tryToSolveTypeUncached(name) ==> com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver.tryToSolveTypeUncached(java.lang.String)
  Line 106) result.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 107) foundTypes.put(name, result.getCorrespondingDeclaration()) ==> java.util.Map.put(K, V)
  Line 107) result.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 114) name.split("\\.") ==> java.lang.String.split(java.lang.String)
  Line 117) srcDir.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 133) parse(srcFile) ==> com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver.parse(java.io.File)
  Line 134) Navigator.findType(compilationUnit, typeName) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.findType(com.github.javaparser.ast.CompilationUnit, java.lang.String)
  Line 135) astTypeDeclaration.isPresent() ==> java.util.Optional.isPresent()
  Line 136) SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get())) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 136) JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 136) JavaParserFacade.get(this) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 136) astTypeDeclaration.get() ==> java.util.Optional.get()
  Line 143) parseDirectory(srcFile.getParentFile()) ==> com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver.parseDirectory(java.io.File)
  Line 143) srcFile.getParentFile() ==> java.io.File.getParentFile()
  Line 145) Navigator.findType(compilationUnit, typeName) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.findType(com.github.javaparser.ast.CompilationUnit, java.lang.String)
  Line 146) astTypeDeclaration.isPresent() ==> java.util.Optional.isPresent()
  Line 147) SymbolReference.solved(JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get())) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 147) JavaParserFacade.get(this).getTypeDeclaration(astTypeDeclaration.get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 147) JavaParserFacade.get(this) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 147) astTypeDeclaration.get() ==> java.util.Optional.get()
  Line 155) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
