  Line 100) JavaParserFacade.get(typeSolver).getTypeDeclaration(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration)
  Line 100) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 101) typeDeclaration.isClass() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.isClass()
  Line 102) out.println("\n[ Class " + typeDeclaration.getQualifiedName() + " ]") ==> java.io.PrintStream.println(java.lang.String)
  Line 102) typeDeclaration.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 103) typeDeclaration.asClass().getAllSuperClasses() ==> com.github.javaparser.symbolsolver.model.declarations.ClassDeclaration.getAllSuperClasses()
  Line 103) typeDeclaration.asClass() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.asClass()
  Line 104) out.println("  superclass: " + sc.getQualifiedName()) ==> java.io.PrintStream.println(java.lang.String)
  Line 104) sc.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getQualifiedName()
  Line 106) typeDeclaration.asClass().getAllInterfaces() ==> com.github.javaparser.symbolsolver.model.declarations.ClassDeclaration.getAllInterfaces()
  Line 106) typeDeclaration.asClass() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.asClass()
  Line 107) out.println("  interface: " + sc.getQualifiedName()) ==> java.io.PrintStream.println(java.lang.String)
  Line 107) sc.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getQualifiedName()
  Line 114) solveTypeDecl((ClassOrInterfaceDeclaration) node) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solveTypeDecl(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration)
  Line 116) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 116) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 117) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 118) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 120) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 120) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 122) JavaParserFacade.get(typeSolver).getType(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(com.github.javaparser.ast.Node)
  Line 122) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 123) out.println("  Line " + node.getRange().get().begin.line + ") " + node + " ==> " + ref.describe()) ==> java.io.PrintStream.println(java.lang.String)
  Line 123) node.getRange().get() ==> java.util.Optional.get()
  Line 123) node.getRange() ==> com.github.javaparser.ast.Node.getRange()
  Line 123) ref.describe() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.describe()
  Line 127) err.println(upe.getMessage()) ==> java.io.PrintStream.println(java.lang.String)
  Line 127) upe.getMessage() ==> java.lang.Throwable.getMessage()
  Line 131) err.println(re.getMessage()) ==> java.io.PrintStream.println(java.lang.String)
  Line 131) re.getMessage() ==> java.lang.Throwable.getMessage()
  Line 140) out.println("  Line " + node.getBegin().get().line + ") " + node + " ==> " + toString((MethodCallExpr) node)) ==> java.io.PrintStream.println(java.lang.String)
  Line 140) node.getBegin().get() ==> java.util.Optional.get()
  Line 140) node.getBegin() ==> com.github.javaparser.ast.nodeTypes.NodeWithRange.getBegin()
  Line 140) toString((MethodCallExpr) node) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.toString(com.github.javaparser.ast.expr.MethodCallExpr)
  Line 142) node.getChildNodes() ==> com.github.javaparser.ast.Node.getChildNodes()
  Line 143) solveMethodCalls(child) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solveMethodCalls(com.github.javaparser.ast.Node)
  Line 149) toString(JavaParserFacade.get(typeSolver).solve(node)) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.toString(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration>)
  Line 149) JavaParserFacade.get(typeSolver).solve(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(com.github.javaparser.ast.expr.MethodCallExpr)
  Line 149) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 152) System.err.println("Error resolving call at L" + node.getBegin().get().line + ": " + node) ==> java.io.PrintStream.println(java.lang.String)
  Line 152) node.getBegin().get() ==> java.util.Optional.get()
  Line 152) node.getBegin() ==> com.github.javaparser.ast.nodeTypes.NodeWithRange.getBegin()
  Line 153) e.printStackTrace() ==> java.lang.Throwable.printStackTrace()
  Line 160) methodDeclarationSymbolReference.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 161) methodDeclarationSymbolReference.getCorrespondingDeclaration().getQualifiedSignature() ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getQualifiedSignature()
  Line 161) methodDeclarationSymbolReference.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 169) collectAllNodes(node, nodes) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.collectAllNodes(com.github.javaparser.ast.Node, java.util.List<com.github.javaparser.ast.Node>)
  Line 170) nodes.sort((n1, n2) -> n1.getBegin().get().compareTo(n2.getBegin().get())) ==> java.util.List.sort(java.util.Comparator<? super E>)
  Line 170) n1.getBegin().get().compareTo(n2.getBegin().get()) ==> com.github.javaparser.Position.compareTo(com.github.javaparser.Position)
  Line 170) n1.getBegin().get() ==> java.util.Optional.get()
  Line 170) n1.getBegin() ==> com.github.javaparser.ast.nodeTypes.NodeWithRange.getBegin()
  Line 170) n2.getBegin().get() ==> java.util.Optional.get()
  Line 170) n2.getBegin() ==> com.github.javaparser.ast.nodeTypes.NodeWithRange.getBegin()
  Line 175) nodes.add(node) ==> java.util.List.add(E)
  Line 176) node.getChildNodes().forEach(c -> collectAllNodes(c, nodes)) ==> java.lang.Iterable.forEach(java.util.function.Consumer<? super T>)
  Line 176) node.getChildNodes() ==> com.github.javaparser.ast.Node.getChildNodes()
  Line 176) collectAllNodes(c, nodes) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.collectAllNodes(com.github.javaparser.ast.Node, java.util.List<com.github.javaparser.ast.Node>)
  Line 180) file.isDirectory() ==> java.io.File.isDirectory()
  Line 181) file.listFiles() ==> java.io.File.listFiles()
  Line 182) solve(f) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solve(java.io.File)
  Line 185) file.getName().endsWith(".java") ==> java.lang.String.endsWith(java.lang.String)
  Line 185) file.getName() ==> java.io.File.getName()
  Line 187) out.println("- parsing " + file.getAbsolutePath()) ==> java.io.PrintStream.println(java.lang.String)
  Line 187) file.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 189) JavaParser.parse(file) ==> com.github.javaparser.JavaParser.parse(java.io.File)
  Line 190) collectAllNodes(cu) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.collectAllNodes(com.github.javaparser.ast.Node)
  Line 191) nodes.forEach(n -> solve(n)) ==> java.lang.Iterable.forEach(java.util.function.Consumer<? super T>)
  Line 191) solve(n) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solve(com.github.javaparser.ast.Node)
  Line 197) file.isDirectory() ==> java.io.File.isDirectory()
  Line 198) file.listFiles() ==> java.io.File.listFiles()
  Line 199) solveMethodCalls(f) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solveMethodCalls(java.io.File)
  Line 202) file.getName().endsWith(".java") ==> java.lang.String.endsWith(java.lang.String)
  Line 202) file.getName() ==> java.io.File.getName()
  Line 204) out.println("- parsing " + file.getAbsolutePath()) ==> java.io.PrintStream.println(java.lang.String)
  Line 204) file.getAbsolutePath() ==> java.io.File.getAbsolutePath()
  Line 206) JavaParser.parse(file) ==> com.github.javaparser.JavaParser.parse(java.io.File)
  Line 207) solveMethodCalls(cu) ==> com.github.javaparser.symbolsolver.SourceFileInfoExtractor.solveMethodCalls(com.github.javaparser.ast.Node)
