String[] typeParameters= Signature.getTypeParameters(refTypeSig); if (typeParameters.length > 0) {
int genericStart = refTypeSig.indexOf(Signature.C_GENERIC_START); if (genericStart != -1) {  StringBuffer buf= new StringBuffer();  String erasure= resolveAndAdd(Signature.getTypeErasure(refTypeSig), declaringType, imports); buf.append(erasure); buf.append('<'); String[] typeArguments= Signature.getTypeArguments(refTypeSig); if (typeArguments.length > 0) { for (int i= 0; i < typeArguments.length; i++) { if (i > 0) { buf.append(", "); } buf.append(resolveAndAdd(typeArguments[i], declaringType, imports)); } } buf.append('>'); return buf.toString();
	private static String resolveAndAdd(String refTypeSig, IType declaringType, IImportsStructure imports) throws JavaModelException {		String[] typeParameters= Signature.getTypeParameters(refTypeSig);		if (typeParameters.length > 0) {			// see bug 68847 		}		String resolvedTypeName= JavaModelUtil.getResolvedTypeName(refTypeSig, declaringType);		if (resolvedTypeName != null) {			StringBuffer buf= new StringBuffer();			if (imports != null) {				buf.append(imports.addImport(resolvedTypeName));			} else {				buf.append(resolvedTypeName);			}			int arrayCount= Signature.getArrayCount(refTypeSig);			for (int i= 0; i < arrayCount; i++) {				buf.append("[]"); //$NON-NLS-1$			}			return buf.toString();		}		return Signature.toString(refTypeSig);	}