code: public ParameterizedTypeReference toInstanceTypeReference() {
  		ParameterizedTypeReference result = getOwner().newParameterizedTypeReference(getType());
  		for(LightweightTypeReference typeArgument: getTypeArguments()) {
  			result.addTypeArgument(typeArgument.getInvariantBoundSubstitute());
  		}
  		return result;
  	}
docs: Returns a projection of this type to the instance level. That is, type arguments will
  be replaced by their invariant bounds.
  
  The instance projection of <code>ArrayList&lt;? extends Iterable&lt;? extends String&gt;&gt;</code>
  is <code>ArrayList&lt;Iterable&lt;? extends String&gt;&gt;</code> since it is possible to create instances
  of <code>ArrayList&lt;Iterable&lt;? extends String&gt;&gt;</code>.