  Line 39) Helper.getPackageName(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getPackageName(com.github.javaparser.ast.Node)
  Line 43) Helper.getClassName("", wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getClassName(java.lang.String, com.github.javaparser.ast.Node)
  Line 47) Helper.containerName(getParentNode(wrappedNode)) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.containerName(com.github.javaparser.ast.Node)
  Line 47) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 48) containerName.isEmpty() ==> java.lang.String.isEmpty()
  Line 49) wrappedNode.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 49) wrappedNode.getName() ==> com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.getName()
  Line 51) wrappedNode.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 51) wrappedNode.getName() ==> com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.getName()
  Line 56) other.getAllAncestors() ==> com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.getAllAncestors()
  Line 57) ancestorsOfOther.add(new ReferenceTypeImpl(other, typeSolver)) ==> java.util.List.add(E)
  Line 59) ancestorOfOther.getQualifiedName().equals(this.getQualifiedName()) ==> java.lang.String.equals(java.lang.Object)
  Line 59) ancestorOfOther.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getQualifiedName()
  Line 59) this.getQualifiedName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.getQualifiedName()
  Line 67) type.isNull() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isNull()
  Line 70) type.isReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isReferenceType()
  Line 71) typeSolver.solveType(type.describe()) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 71) type.describe() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.describe()
  Line 72) isAssignableBy(other) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.isAssignableBy(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration)
  Line 79) this.wrappedNode.getTypeParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.getTypeParameters()
  Line 80) this.wrappedNode.getTypeParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.getTypeParameters()
  Line 81) typeParameter.getName().getId().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 81) typeParameter.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 81) typeParameter.getName() ==> com.github.javaparser.ast.type.TypeParameter.getName()
  Line 82) SymbolReference.solved(new JavaParserTypeVariableDeclaration(typeParameter, typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 88) this.wrappedNode.getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 91) internalType.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 92) internalType.getName().getId().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 92) internalType.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 92) internalType.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 94) SymbolReference.solved(new JavaParserClassDeclaration((com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) internalType, typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 96) SymbolReference.solved(new JavaParserEnumDeclaration((com.github.javaparser.ast.body.EnumDeclaration) internalType, typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 100) name.startsWith(prefix) ==> java.lang.String.startsWith(java.lang.String)
  Line 100) name.length() ==> java.lang.String.length()
  Line 100) prefix.length() ==> java.lang.String.length()
  Line 102) new JavaParserClassDeclaration((com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) internalType, typeSolver).solveType(name.substring(prefix.length()), typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 102) name.substring(prefix.length()) ==> java.lang.String.substring(int)
  Line 102) prefix.length() ==> java.lang.String.length()
  Line 104) new SymbolSolver(typeSolver).solveTypeInType(new JavaParserEnumDeclaration((com.github.javaparser.ast.body.EnumDeclaration) internalType, typeSolver), name.substring(prefix.length())) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveTypeInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String)
  Line 104) name.substring(prefix.length()) ==> java.lang.String.substring(int)
  Line 104) prefix.length() ==> java.lang.String.length()
  Line 111) SymbolReference.unsolved(TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 115) wrappedNode.getParentNode() ==> com.github.javaparser.ast.Node.getParentNode()
  Line 116) parent.isPresent() ==> java.util.Optional.isPresent()
  Line 117) Optional.of(JavaParserFactory.toTypeDeclaration(parent.get(), typeSolver)) ==> java.util.Optional.of(T)
  Line 117) JavaParserFactory.toTypeDeclaration(parent.get(), typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.toTypeDeclaration(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 117) parent.get() ==> java.util.Optional.get()
  Line 118) Optional.empty() ==> java.util.Optional.empty()
