  Line 69) wrappedNode.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 71) methods.add(new JavaParserMethodDeclaration((com.github.javaparser.ast.body.MethodDeclaration) member, typeSolver)) ==> java.util.Set.add(E)
  Line 78) JavaParserFactory.getContext(wrappedNode, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 83) wrappedNode.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 83) wrappedNode.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 109) other.getQualifiedName().equals(this.getQualifiedName()) ==> java.lang.String.equals(java.lang.Object)
  Line 109) other.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 109) this.getQualifiedName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration.getQualifiedName()
  Line 112) other.getQualifiedName().equals(Enum.class.getCanonicalName()) ==> java.lang.String.equals(java.lang.Object)
  Line 112) other.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 112) Enum.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 116) other.getQualifiedName().equals(Comparable.class.getCanonicalName()) ==> java.lang.String.equals(java.lang.Object)
  Line 116) other.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 116) Comparable.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 119) other.getQualifiedName().equals(Serializable.class.getCanonicalName()) ==> java.lang.String.equals(java.lang.Object)
  Line 119) other.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 119) Serializable.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 122) other.getQualifiedName().equals(Object.class.getCanonicalName()) ==> java.lang.String.equals(java.lang.Object)
  Line 122) other.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 122) Object.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 140) javaParserTypeAdapter.getPackageName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.getPackageName()
  Line 145) javaParserTypeAdapter.getClassName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.getClassName()
  Line 150) javaParserTypeAdapter.getQualifiedName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.getQualifiedName()
  Line 155) javaParserTypeAdapter.isAssignableBy(other) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.isAssignableBy(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration)
  Line 160) javaParserTypeAdapter.isAssignableBy(type) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.isAssignableBy(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 171) getClass() ==> java.lang.Object.getClass()
  Line 171) o.getClass() ==> java.lang.Object.getClass()
  Line 175) wrappedNode.equals(that.wrappedNode) ==> com.github.javaparser.ast.Node.equals(java.lang.Object)
  Line 182) wrappedNode.hashCode() ==> com.github.javaparser.ast.Node.hashCode()
  Line 187) name.equals("values") ==> java.lang.String.equals(java.lang.Object)
  Line 187) parameterTypes.isEmpty() ==> java.util.List.isEmpty()
  Line 188) Optional.of(new ValuesMethod(this, typeSolver).getUsage(null)) ==> java.util.Optional.of(T)
  Line 188) new ValuesMethod(this, typeSolver).getUsage(null) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration.ValuesMethod.getUsage(com.github.javaparser.ast.Node)
  Line 191) getContext().solveMethodAsUsage(name, parameterTypes, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveMethodAsUsage(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 191) getContext() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration.getContext()
  Line 197) this.wrappedNode.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 198) this.wrappedNode.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 201) field.getVariables() ==> com.github.javaparser.ast.body.FieldDeclaration.getVariables()
  Line 202) fields.add(new JavaParserFieldDeclaration(vd, typeSolver)) ==> java.util.ArrayList.add(E)
  Line 208) this.wrappedNode.getEntries() ==> com.github.javaparser.ast.body.EnumDeclaration.getEntries()
  Line 209) this.wrappedNode.getEntries() ==> com.github.javaparser.ast.body.EnumDeclaration.getEntries()
  Line 210) fields.add(new JavaParserFieldDeclaration(member, typeSolver)) ==> java.util.ArrayList.add(E)
  Line 220) ReflectionFactory.typeUsageFor(Enum.class, typeSolver).asReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asReferenceType()
  Line 220) ReflectionFactory.typeUsageFor(Enum.class, typeSolver) ==> com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory.typeUsageFor(java.lang.reflect.Type, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 221) enumClass.getTypeDeclaration().getTypeParameters().get(0) ==> java.util.List.get(int)
  Line 221) enumClass.getTypeDeclaration().getTypeParameters() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable.getTypeParameters()
  Line 221) enumClass.getTypeDeclaration() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getTypeDeclaration()
  Line 222) enumClass.deriveTypeParameters(new TypeParametersMap.Builder().setValue(eTypeParameter, new ReferenceTypeImpl(this, typeSolver)).build()) ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.deriveTypeParameters(com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParametersMap)
  Line 222) new TypeParametersMap.Builder().setValue(eTypeParameter, new ReferenceTypeImpl(this, typeSolver)).build() ==> com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParametersMap.Builder.build()
  Line 222) new TypeParametersMap.Builder().setValue(eTypeParameter, new ReferenceTypeImpl(this, typeSolver)) ==> com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParametersMap.Builder.setValue(com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 223) ancestors.add(enumClass) ==> java.util.List.add(E)
  Line 224) wrappedNode.getImplementedTypes() ==> com.github.javaparser.ast.body.EnumDeclaration.getImplementedTypes()
  Line 225) wrappedNode.getImplementedTypes() ==> com.github.javaparser.ast.body.EnumDeclaration.getImplementedTypes()
  Line 226) new SymbolSolver(typeSolver).solveTypeInType(this, implementedType.getName().getId()) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveTypeInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String)
  Line 226) implementedType.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 226) implementedType.getName() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getName()
  Line 227) implementedDeclRef.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 228) implementedType.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 228) implementedType.getName() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getName()
  Line 230) ancestors.add(new ReferenceTypeImpl((ReferenceTypeDeclaration) implementedDeclRef.getCorrespondingDeclaration(), typeSolver)) ==> java.util.List.add(E)
  Line 230) implementedDeclRef.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 238) Collections.emptyList() ==> java.util.Collections.emptyList()
  Line 311) Collections.emptyList() ==> java.util.Collections.emptyList()
  Line 316) Helper.toAccessLevel(enumDeclaration.getWrappedNode().getModifiers()) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.toAccessLevel(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 316) enumDeclaration.getWrappedNode().getModifiers() ==> com.github.javaparser.ast.body.TypeDeclaration.getModifiers()
  Line 316) enumDeclaration.getWrappedNode() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration.getWrappedNode()
  Line 328) this.wrappedNode.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 330) res.add(JavaParserFacade.get(typeSolver).getTypeDeclaration((com.github.javaparser.ast.body.TypeDeclaration) member)) ==> java.util.Set.add(E)
  Line 330) JavaParserFacade.get(typeSolver).getTypeDeclaration((com.github.javaparser.ast.body.TypeDeclaration) member) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 330) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 338) javaParserTypeAdapter.containerType() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeAdapter.containerType()
