  Line 49) name.contains(".") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 69) itName.contains(".") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 70) getType(itName) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.getType(java.lang.String)
  Line 71) getMember(itName) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.getMember(java.lang.String)
  Line 72) this.solveType(typeName, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 73) type.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 74) new SymbolSolver(typeSolver).solveSymbolInType(type.getCorrespondingDeclaration(), memberName) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String)
  Line 74) type.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 81) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 82) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 83) importDecl.isStatic() ==> com.github.javaparser.ast.ImportDeclaration.isStatic()
  Line 84) importDecl.isAsterisk() ==> com.github.javaparser.ast.ImportDeclaration.isAsterisk()
  Line 85) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 86) typeSolver.solveType(qName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 87) new SymbolSolver(typeSolver).solveSymbolInType(importedType, name) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String)
  Line 88) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 92) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 95) getMember(whole) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.getMember(java.lang.String)
  Line 96) getType(whole) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.getType(java.lang.String)
  Line 98) memberName.equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 99) typeSolver.solveType(typeName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 100) new SymbolSolver(typeSolver).solveSymbolInType(importedType, memberName) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String)
  Line 107) SymbolReference.unsolved(ValueDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 112) wrappedNode.getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 113) wrappedNode.getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 114) type.getName().getId().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 114) type.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 114) type.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 116) SymbolReference.solved(JavaParserFacade.get(typeSolver).getTypeDeclaration((ClassOrInterfaceDeclaration) type)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 116) JavaParserFacade.get(typeSolver).getTypeDeclaration((ClassOrInterfaceDeclaration) type) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration)
  Line 116) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 118) SymbolReference.solved(new JavaParserAnnotationDeclaration((AnnotationDeclaration) type, typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 120) type.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 120) type.getClass() ==> java.lang.Object.getClass()
  Line 126) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 127) name.indexOf('.') ==> java.lang.String.indexOf(int)
  Line 130) name.substring(0, dotPos) ==> java.lang.String.substring(int, int)
  Line 133) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 134) importDecl.isAsterisk() ==> com.github.javaparser.ast.ImportDeclaration.isAsterisk()
  Line 135) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 136) importDecl.getName().getQualifier().isPresent() ==> java.util.Optional.isPresent()
  Line 136) importDecl.getName().getQualifier() ==> com.github.javaparser.ast.expr.Name.getQualifier()
  Line 136) importDecl.getName() ==> com.github.javaparser.ast.ImportDeclaration.getName()
  Line 137) importDecl.getName().getIdentifier().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 137) importDecl.getName().getIdentifier() ==> com.github.javaparser.ast.expr.Name.getIdentifier()
  Line 137) importDecl.getName() ==> com.github.javaparser.ast.ImportDeclaration.getName()
  Line 140) qName.endsWith("." + prefix) ==> java.lang.String.endsWith(java.lang.String)
  Line 142) name.substring(dotPos) ==> java.lang.String.substring(int)
  Line 147) typeSolver.tryToSolveType(qName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 148) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 149) SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 155) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 156) importDecl.isAsterisk() ==> com.github.javaparser.ast.ImportDeclaration.isAsterisk()
  Line 157) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 158) typeSolver.tryToSolveType(qName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 159) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 160) SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 167) this.wrappedNode.getPackageDeclaration().isPresent() ==> java.util.Optional.isPresent()
  Line 167) this.wrappedNode.getPackageDeclaration() ==> com.github.javaparser.ast.CompilationUnit.getPackageDeclaration()
  Line 168) this.wrappedNode.getPackageDeclaration().get().getName().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 168) this.wrappedNode.getPackageDeclaration().get().getName() ==> com.github.javaparser.ast.PackageDeclaration.getName()
  Line 168) this.wrappedNode.getPackageDeclaration().get() ==> java.util.Optional.get()
  Line 168) this.wrappedNode.getPackageDeclaration() ==> com.github.javaparser.ast.CompilationUnit.getPackageDeclaration()
  Line 169) typeSolver.tryToSolveType(qName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 170) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 171) SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 176) typeSolver.tryToSolveType(qName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 177) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 178) SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 183) typeSolver.tryToSolveType("java.lang." + name) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 184) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 185) SymbolReference.adapt(ref, com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 189) isQualifiedName(name) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.isQualifiedName(java.lang.String)
  Line 190) SymbolReference.adapt(typeSolver.tryToSolveType(name), com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.adapt(com.github.javaparser.symbolsolver.model.resolution.SymbolReference<? extends O>, java.lang.Class<O>)
  Line 190) typeSolver.tryToSolveType(name) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 192) SymbolReference.unsolved(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 197) type.getScope().isPresent() ==> java.util.Optional.isPresent()
  Line 197) type.getScope() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getScope()
  Line 198) qName(type.getScope().get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.qName(com.github.javaparser.ast.type.ClassOrInterfaceType)
  Line 198) type.getScope().get() ==> java.util.Optional.get()
  Line 198) type.getScope() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getScope()
  Line 198) type.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 198) type.getName() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getName()
  Line 200) type.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 200) type.getName() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getName()
  Line 205) name.getQualifier().isPresent() ==> java.util.Optional.isPresent()
  Line 205) name.getQualifier() ==> com.github.javaparser.ast.expr.Name.getQualifier()
  Line 206) qName(name.getQualifier().get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.qName(com.github.javaparser.ast.expr.Name)
  Line 206) name.getQualifier().get() ==> java.util.Optional.get()
  Line 206) name.getQualifier() ==> com.github.javaparser.ast.expr.Name.getQualifier()
  Line 206) name.getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 208) name.getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 213) qName.split("\\.") ==> java.lang.String.split(java.lang.String)
  Line 218) qName.lastIndexOf('.') ==> java.lang.String.lastIndexOf(int)
  Line 222) qName.substring(0, lastDot) ==> java.lang.String.substring(int, int)
  Line 228) wrappedNode.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 229) importDecl.isStatic() ==> com.github.javaparser.ast.ImportDeclaration.isStatic()
  Line 230) importDecl.isAsterisk() ==> com.github.javaparser.ast.ImportDeclaration.isAsterisk()
  Line 231) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 233) this.wrappedNode.getPackageDeclaration().isPresent() ==> java.util.Optional.isPresent()
  Line 233) this.wrappedNode.getPackageDeclaration() ==> com.github.javaparser.ast.CompilationUnit.getPackageDeclaration()
  Line 234) this.wrappedNode.getPackageDeclaration().get().getName().getIdentifier().equals(packageName(importString)) ==> java.lang.String.equals(java.lang.Object)
  Line 234) this.wrappedNode.getPackageDeclaration().get().getName().getIdentifier() ==> com.github.javaparser.ast.expr.Name.getIdentifier()
  Line 234) this.wrappedNode.getPackageDeclaration().get().getName() ==> com.github.javaparser.ast.PackageDeclaration.getName()
  Line 234) this.wrappedNode.getPackageDeclaration().get() ==> java.util.Optional.get()
  Line 234) this.wrappedNode.getPackageDeclaration() ==> com.github.javaparser.ast.CompilationUnit.getPackageDeclaration()
  Line 234) packageName(importString) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.packageName(java.lang.String)
  Line 235) this.wrappedNode.getTypes().stream().anyMatch(it -> it.getName().getIdentifier().equals(toSimpleName(importString))) ==> ERROR
  Line 235) this.wrappedNode.getTypes().stream() ==> java.util.Collection.stream()
  Line 235) this.wrappedNode.getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 235) it.getName().getIdentifier().equals(toSimpleName(importString)) ==> ERROR
  Line 235) it.getName().getIdentifier() ==> ERROR
  Line 235) it.getName() ==> ERROR
  Line 235) toSimpleName(importString) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.toSimpleName(java.lang.String)
  Line 238) SymbolReference.unsolved(MethodDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 241) typeSolver.solveType(importString) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 242) MethodResolutionLogic.solveMethodInType(ref, name, argumentsTypes, true, typeSolver) ==> com.github.javaparser.symbolsolver.resolution.MethodResolutionLogic.solveMethodInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 244) method.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 248) importDecl.getNameAsString() ==> com.github.javaparser.ast.nodeTypes.NodeWithName.getNameAsString()
  Line 250) qName.equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 250) qName.endsWith("." + name) ==> java.lang.String.endsWith(java.lang.String)
  Line 251) getType(qName) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext.getType(java.lang.String)
  Line 252) typeSolver.solveType(typeName) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 253) MethodResolutionLogic.solveMethodInType(ref, name, argumentsTypes, true, typeSolver) ==> com.github.javaparser.symbolsolver.resolution.MethodResolutionLogic.solveMethodInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 254) method.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 261) SymbolReference.unsolved(MethodDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 269) qName.lastIndexOf('.') ==> java.lang.String.lastIndexOf(int)
  Line 273) qName.substring(0, index) ==> java.lang.String.substring(int, int)
  Line 278) qName.lastIndexOf('.') ==> java.lang.String.lastIndexOf(int)
  Line 282) qName.substring(index + 1) ==> java.lang.String.substring(int)
