code: protected LightweightTypeReference createNormalizedPairType(LightweightTypeReference pairType, LightweightTypeReference mapType, ITypeReferenceOwner owner) {
  		ParameterizedTypeReference result = new ParameterizedTypeReference(owner, pairType.getType());
  		LightweightTypeReference keyType = mapType.getTypeArguments().get(0);
  		if (keyType.getKind() != LightweightTypeReference.KIND_WILDCARD_TYPE_REFERENCE) {
  			WildcardTypeReference wc = new WildcardTypeReference(owner);
  			wc.addUpperBound(keyType);
  			keyType = wc;
  		}
  		LightweightTypeReference valueType = mapType.getTypeArguments().get(1);
  		if (valueType.getKind() != LightweightTypeReference.KIND_WILDCARD_TYPE_REFERENCE) {
  			WildcardTypeReference wc = new WildcardTypeReference(owner);
  			wc.addUpperBound(valueType);
  			valueType = wc;
  		}
  		result.addTypeArgument(keyType);
  		result.addTypeArgument(valueType);
  		return result;
  	}
docs: The map type may be constructed from different pairs, e.g. the pair's type arguments don't need to be as strict
  as the map suggests. The pair's expectation is adjusted accordingly.