code: protected String getTypeParameterAsString(JvmTypeParameter typeParameter) {
  		StringBuilder b = new StringBuilder();
  		b.append(typeParameter.getName());
  		ITypeReferenceOwner referenceOwner = getState().getReferenceOwner();
  		if(!typeParameter.getConstraints().isEmpty()) {
  			boolean firstUpperBound = true;
  			for(int j=0; j<typeParameter.getConstraints().size(); ++j) {
  				JvmTypeConstraint constraint = typeParameter.getConstraints().get(j);
  				LightweightTypeReference typeRef = referenceOwner.toLightweightTypeReference(constraint.getTypeReference());
  				if(constraint instanceof JvmUpperBound) {
  					if(typeRef.isType(Object.class))
  						continue;
  					if (firstUpperBound) {
  						b.append(" extends ");
  						firstUpperBound = false;
  					} else {
  						b.append(" & ");
  					}
  				} else 
  					b.append(" super ");
  				b.append(typeRef.getHumanReadableName());
  			}
  		}
  		return b.toString();
  	}
docs: Returns the unresolved string representation of the given type parameter. The simple names of
  the type bounds are used. The string representation includes the bounds, except for
  the upper bound {@link Object}.