  Line 43) this.nameToValue.putAll(nameToValue) ==> java.util.Map.putAll(java.util.Map<? extends K, ? extends V>)
  Line 45) this.nameToDeclaration.putAll(nameToDeclaration) ==> java.util.Map.putAll(java.util.Map<? extends K, ? extends V>)
  Line 54) typeParameter.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration.getQualifiedName()
  Line 55) nameToValue.put(qualifiedName, value) ==> java.util.Map.put(K, V)
  Line 56) nameToDeclaration.put(qualifiedName, typeParameter) ==> java.util.Map.put(K, V)
  Line 68) nameToValue.equals(that.nameToValue) ==> java.util.Map.equals(java.lang.Object)
  Line 68) nameToDeclaration.equals(that.nameToDeclaration) ==> java.util.Map.equals(java.lang.Object)
  Line 74) nameToValue.hashCode() ==> java.util.Map.hashCode()
  Line 88) new Builder().build() ==> com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParametersMap.Builder.build()
  Line 93) this.nameToValue.putAll(nameToValue) ==> java.util.Map.putAll(java.util.Map<? extends K, ? extends V>)
  Line 95) this.nameToDeclaration.putAll(nameToDeclaration) ==> java.util.Map.putAll(java.util.Map<? extends K, ? extends V>)
  Line 99) typeParameter.getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration.getQualifiedName()
  Line 100) nameToValue.containsKey(qualifiedName) ==> java.util.Map.containsKey(java.lang.Object)
  Line 101) nameToValue.get(qualifiedName) ==> java.util.Map.get(java.lang.Object)
  Line 108) nameToValue.containsKey(signature) ==> java.util.Map.containsKey(java.lang.Object)
  Line 109) Optional.of(nameToValue.get(signature)) ==> java.util.Optional.of(T)
  Line 109) nameToValue.get(signature) ==> java.util.Map.get(java.lang.Object)
  Line 111) Optional.empty() ==> java.util.Optional.empty()
  Line 116) nameToValue.keySet() ==> java.util.Map.keySet()
  Line 120) nameToValue.values() ==> java.util.Map.values()
  Line 128) nameToValue.isEmpty() ==> java.util.Map.isEmpty()
  Line 133) this.nameToDeclaration.values() ==> java.util.Map.values()
  Line 134) type.replaceTypeVariables(typeParameterDeclaration, getValue(typeParameterDeclaration), inferredTypes) ==> com.github.javaparser.symbolsolver.model.typesystem.Type.replaceTypeVariables(com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration, com.github.javaparser.symbolsolver.model.typesystem.Type, java.util.Map<com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration, com.github.javaparser.symbolsolver.model.typesystem.Type>)
  Line 134) getValue(typeParameterDeclaration) ==> com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParametersMap.getValue(com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration)
