public Map<JvmTypeParameter, LightweightMergedBoundTypeArgument> getTypeParameterMapping(LightweightTypeReference reference) { LightweightTraversalData data = new LightweightTraversalData(); reference.accept(this, data); return data.getTypeParameterMapping(); }
@Override public Boolean doVisitParameterizedTypeReference(ParameterizedTypeReference reference, LightweightTraversalData data) { JvmType type = reference.getType(); if (!type.eIsProxy() && data.getVisited().add(type)) { if (type instanceof JvmTypeParameter) { JvmTypeParameter typeParameter = (JvmTypeParameter) type; if (!data.getTypeParameterMapping().containsKey(type)) { return addConstraintMapping(typeParameter, owner, data); } } else { return doVisitParameterizedTypeReference(reference, type, data); } } return Boolean.FALSE; }
result.addComponent(upperBound); data.getTypeParameterMapping().put(typeParameter, new LightweightMergedBoundTypeArgument(result, VarianceInfo.INVARIANT)); } else if (upperBounds.size() == 1) { data.getTypeParameterMapping().put(typeParameter, new LightweightMergedBoundTypeArgument(upperBounds.get(0), VarianceInfo.INVARIANT));
@Override /* @Nullable */ protected LightweightTypeReference getUnmappedSubstitute(ParameterizedTypeReference reference, JvmTypeParameter type, ConstraintVisitingInfo visiting) { if (!ignoreDeclaredTypeParameters) { if (isDeclaredTypeParameter(type)) { return reference; } } ConstraintAwareTypeArgumentCollector collector = new ConstraintAwareTypeArgumentCollector(getOwner()); LightweightTraversalData data = new LightweightTraversalData(); data.getTypeParameterMapping().putAll(getTypeParameterMapping()); reference.accept(collector, data); LightweightMergedBoundTypeArgument boundTypeArgument = data.getTypeParameterMapping().get(type); if (boundTypeArgument != null && boundTypeArgument.getTypeReference() != reference) { return boundTypeArgument.getTypeReference().accept(this, visiting); } if (boundTypeArgument != null) return boundTypeArgument.getTypeReference(); return null; }
LightweightTypeReference argument = typeArguments.get(i); if (param != null && argument != null) { data.getTypeParameterMapping().put(param, new LightweightMergedBoundTypeArgument(argument, VarianceInfo.INVARIANT));