/** * Allows to refuse a certain type parameter to be substituted. * @param typeParameter the type parameter that should be substituted. * @return <code>false</code> if the parameter may be substituted. <code>true</code> if it should be preserved. */ protected boolean isResolvedTypeParameter(JvmTypeParameter typeParameter) { return isResolvedTypeParameter(getContextType(), typeParameter); }
protected boolean isResolvedTypeParameter(LightweightTypeReference typeReference, JvmTypeParameter typeParameter) { List<LightweightTypeReference> typeArguments = typeReference.getTypeArguments(); for(int i = 0, size = typeArguments.size(); i < size; i++) { LightweightTypeReference typeArgument = typeArguments.get(i); if (typeParameter.equals(typeArgument.getType()) || isResolvedTypeParameter(typeArgument, typeParameter)) { return true; } } LightweightTypeReference outer = typeReference.getOuter(); if (outer != null) { if (isResolvedTypeParameter(outer, typeParameter)) { return true; } } return false; }
@Override protected boolean isDeclaredTypeParameter(JvmTypeParameter typeParameter) { if (super.isDeclaredTypeParameter(typeParameter) || isResolvedTypeParameter(typeParameter) || getTypeParameterMapping().containsKey(typeParameter)) return true; return false; } @Override