  Line 44) ctClass.getDeclaredMethods() ==> javassist.CtClass.getDeclaredMethods()
  Line 45) method.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 45) method.getName() ==> javassist.CtMethod.getName()
  Line 48) argumentsTypes.size() ==> java.util.List.size()
  Line 48) methodUsage.getNoParams() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.getNoParams()
  Line 53) method.getGenericSignature() ==> javassist.CtBehavior.getGenericSignature()
  Line 54) SignatureAttribute.toMethodSignature(method.getGenericSignature()) ==> javassist.bytecode.SignatureAttribute.toMethodSignature(java.lang.String)
  Line 54) method.getGenericSignature() ==> javassist.CtBehavior.getGenericSignature()
  Line 55) parseTypeParameters(classSignature.getReturnType().toString(), typeSolver, invokationContext) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.parseTypeParameters(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 55) classSignature.getReturnType().toString() ==> java.lang.Object.toString()
  Line 55) classSignature.getReturnType() ==> javassist.bytecode.SignatureAttribute.MethodSignature.getReturnType()
  Line 56) methodUsage.returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 59) newReturnType.asReferenceType().transformTypeParameters(tp -> parametersOfReturnType.remove(0)) ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.transformTypeParameters(com.github.javaparser.symbolsolver.model.typesystem.TypeTransformer)
  Line 59) newReturnType.asReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asReferenceType()
  Line 59) parametersOfReturnType.remove(0) ==> java.util.List.remove(int)
  Line 61) methodUsage.replaceReturnType(newReturnType) ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.replaceReturnType(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 63) Optional.of(methodUsage) ==> java.util.Optional.of(T)
  Line 71) ctClass.getSuperclass() ==> javassist.CtClass.getSuperclass()
  Line 73) new JavassistClassDeclaration(superClass, typeSolver).solveMethodAsUsage(name, argumentsTypes, typeSolver, invokationContext, null) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistClassDeclaration.solveMethodAsUsage(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>)
  Line 74) ref.isPresent() ==> java.util.Optional.isPresent()
  Line 83) ctClass.getInterfaces() ==> javassist.CtClass.getInterfaces()
  Line 84) new JavassistInterfaceDeclaration(interfaze, typeSolver).solveMethodAsUsage(name, argumentsTypes, typeSolver, invokationContext, null) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistInterfaceDeclaration.solveMethodAsUsage(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>)
  Line 85) ref.isPresent() ==> java.util.Optional.isPresent()
  Line 93) Optional.empty() ==> java.util.Optional.empty()
  Line 98) signature.contains("<") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 99) signature.substring(signature.indexOf('<') + 1) ==> java.lang.String.substring(int)
  Line 99) signature.indexOf('<') ==> java.lang.String.indexOf(int)
  Line 100) signature.endsWith(">") ==> java.lang.String.endsWith(java.lang.String)
  Line 103) signature.substring(0, signature.length() - 1) ==> java.lang.String.substring(int, int)
  Line 103) signature.length() ==> java.lang.String.length()
  Line 104) signature.contains(",") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 107) signature.contains("<") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 110) signature.contains(">") ==> java.lang.String.contains(java.lang.CharSequence)
  Line 114) types.add(new SymbolSolver(typeSolver).solveTypeUsage(signature, invokationContext)) ==> java.util.List.add(E)
  Line 114) new SymbolSolver(typeSolver).solveTypeUsage(signature, invokationContext) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveTypeUsage(java.lang.String, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 117) Collections.emptyList() ==> java.util.Collections.emptyList()
  Line 124) classType.getTypeArguments() ==> javassist.bytecode.SignatureAttribute.ClassType.getTypeArguments()
  Line 124) Collections.emptyList() ==> java.util.Collections.emptyList()
  Line 124) Arrays.stream(classType.getTypeArguments()).map(ta -> typeArgumentToType(ta, typeSolver, typeParametrizable)).collect(Collectors.toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 124) Arrays.stream(classType.getTypeArguments()).map(ta -> typeArgumentToType(ta, typeSolver, typeParametrizable)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 124) Arrays.stream(classType.getTypeArguments()) ==> java.util.Arrays.stream(T[])
  Line 124) classType.getTypeArguments() ==> javassist.bytecode.SignatureAttribute.ClassType.getTypeArguments()
  Line 124) typeArgumentToType(ta, typeSolver, typeParametrizable) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.typeArgumentToType(javassist.bytecode.SignatureAttribute.TypeArgument, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable)
  Line 124) Collectors.toList() ==> java.util.stream.Collectors.toList()
  Line 126) classType.getDeclaringClass() ==> javassist.bytecode.SignatureAttribute.ClassType.getDeclaringClass()
  Line 127) classType.getDeclaringClass().getName() ==> javassist.bytecode.SignatureAttribute.ClassType.getName()
  Line 127) classType.getDeclaringClass() ==> javassist.bytecode.SignatureAttribute.ClassType.getDeclaringClass()
  Line 127) classType.getName() ==> javassist.bytecode.SignatureAttribute.ClassType.getName()
  Line 128) classType.getName() ==> javassist.bytecode.SignatureAttribute.ClassType.getName()
  Line 129) typeSolver.solveType(internalNameToCanonicalName(typeName)) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 130) internalNameToCanonicalName(typeName) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.internalNameToCanonicalName(java.lang.String)
  Line 134) typeParametrizable.findTypeParameter(typeVariableSignature.getName()) ==> com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable.findTypeParameter(java.lang.String)
  Line 134) typeVariableSignature.getName() ==> javassist.bytecode.SignatureAttribute.TypeVariable.getName()
  Line 135) typeParameterDeclarationOpt.isPresent() ==> java.util.Optional.isPresent()
  Line 138) typeParameterDeclarationOpt.get() ==> java.util.Optional.get()
  Line 141) signatureType.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 141) signatureType.getClass() ==> java.lang.Object.getClass()
  Line 146) typeName.replaceAll("\\$", ".") ==> java.lang.String.replaceAll(java.lang.String, java.lang.String)
  Line 150) typeArgument.jvmTypeName() ==> javassist.bytecode.SignatureAttribute.Type.jvmTypeName()
  Line 151) getGenericParameterByName(typeName, typeParametrizable) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.getGenericParameterByName(java.lang.String, com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable)
  Line 152) type.orElseGet(() -> new ReferenceTypeImpl(typeSolver.solveType(internalNameToCanonicalName(typeName)), typeSolver)) ==> java.util.Optional.orElseGet(java.util.function.Supplier<? extends T>)
  Line 153) typeSolver.solveType(internalNameToCanonicalName(typeName)) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 153) internalNameToCanonicalName(typeName) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.internalNameToCanonicalName(java.lang.String)
  Line 158) typeParametrizable.findTypeParameter(typeName) ==> com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable.findTypeParameter(java.lang.String)
  Line 159) tp.map(TypeVariable::new) ==> java.util.Optional.map(java.util.function.Function<? super T, ? extends U>)
  Line 163) typeArgument.isWildcard() ==> javassist.bytecode.SignatureAttribute.TypeArgument.isWildcard()
  Line 164) typeArgument.getType() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getType()
  Line 166) typeArgument.getKind() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getKind()
  Line 167) Wildcard.extendsBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)) ==> com.github.javaparser.symbolsolver.model.typesystem.Wildcard.extendsBound(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 167) objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.objectTypeArgumentToType(javassist.bytecode.SignatureAttribute.ObjectType, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable)
  Line 167) typeArgument.getType() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getType()
  Line 168) typeArgument.getKind() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getKind()
  Line 169) Wildcard.superBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)) ==> com.github.javaparser.symbolsolver.model.typesystem.Wildcard.superBound(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 169) objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.objectTypeArgumentToType(javassist.bytecode.SignatureAttribute.ObjectType, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable)
  Line 169) typeArgument.getType() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getType()
  Line 174) objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistUtils.objectTypeArgumentToType(javassist.bytecode.SignatureAttribute.ObjectType, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable)
  Line 174) typeArgument.getType() ==> javassist.bytecode.SignatureAttribute.TypeArgument.getType()
