  Line 47) replaceTypeParams(methodDeclaration.getReturnType(), typeSolver, context) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.replaceTypeParams(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 47) methodDeclaration.getReturnType() ==> com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration.getReturnType()
  Line 49) methodDeclaration.getNumberOfParams() ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getNumberOfParams()
  Line 50) replaceTypeParams(methodDeclaration.getParam(i).getType(), typeSolver, context) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.replaceTypeParams(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 50) methodDeclaration.getParam(i).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 50) methodDeclaration.getParam(i) ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getParam(int)
  Line 51) params.add(replaced) ==> java.util.List.add(E)
  Line 58) methodDeclaration.getNumberOfParams() ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getNumberOfParams()
  Line 58) methodDeclaration.hasVariadicParameter() ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.hasVariadicParameter()
  Line 59) methodDeclaration.getParam(i).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 59) methodDeclaration.getParam(i) ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getParam(int)
  Line 60) parameterTypes.get(i) ==> java.util.List.get(int)
  Line 61) inferenceContext.addPair(formalParamType, actualParamType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addPair(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 64) inferenceContext.resolve(inferenceContext.addSingle(returnType)) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.resolve(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 64) inferenceContext.addSingle(returnType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addSingle(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 70) type.isTypeVariable() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isTypeVariable()
  Line 71) type.asTypeParameter() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asTypeParameter()
  Line 72) typeParameter.declaredOnType() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration.declaredOnType()
  Line 73) typeParamByName(typeParameter.getName(), typeSolver, context) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.typeParamByName(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 73) typeParameter.getName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration.getName()
  Line 74) typeParam.isPresent() ==> java.util.Optional.isPresent()
  Line 75) typeParam.get() ==> java.util.Optional.get()
  Line 80) type.isReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isReferenceType()
  Line 81) type.asReferenceType().transformTypeParameters(tp -> replaceTypeParams(tp, typeSolver, context)) ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.transformTypeParameters(com.github.javaparser.symbolsolver.model.typesystem.TypeTransformer)
  Line 81) type.asReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asReferenceType()
  Line 81) replaceTypeParams(tp, typeSolver, context) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.replaceTypeParams(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 88) methodDeclaration.getTypeParameters().stream().filter(tp -> tp.getName().equals(name)).map(tp -> toType(tp)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 88) methodDeclaration.getTypeParameters().stream().filter(tp -> tp.getName().equals(name)).map(tp -> toType(tp)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 88) methodDeclaration.getTypeParameters().stream().filter(tp -> tp.getName().equals(name)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 88) methodDeclaration.getTypeParameters().stream() ==> java.util.Collection.stream()
  Line 88) methodDeclaration.getTypeParameters() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable.getTypeParameters()
  Line 88) tp.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 88) tp.getName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration.getName()
  Line 88) toType(tp) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.toType(com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration)
