buffer.append(JavaElementLabels.CONCAT_STRING);
	private static void getTypeLabel(ITypeBinding binding, long flags, StringBuffer buffer) {		if ((flags & JavaElementLabels.T_FULLY_QUALIFIED) != 0) {			final IPackageBinding pack= binding.getPackage();			if (pack != null && !pack.isUnnamed()) {				buffer.append(pack.getName());				buffer.append('.');			}		}		if ((flags & (JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) != 0) {			final ITypeBinding declaring= binding.getDeclaringClass();			if (declaring != null) {				getTypeLabel(declaring, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & JavaElementLabels.P_COMPRESSED), buffer);				buffer.append('.');			}			final IMethodBinding declaringMethod= binding.getDeclaringMethod();			if (declaringMethod != null) {				getMethodLabel(declaringMethod, 0, buffer);				buffer.append('.');			}		}				if (binding.isCapture()) {			getTypeLabel(binding.getWildcard(), flags & JavaElementLabels.T_TYPE_PARAMETERS, buffer);		} else if (binding.isWildcardType()) {			buffer.append('?');			ITypeBinding bound= binding.getBound();			if (bound != null) {				if (binding.isUpperbound()) {					buffer.append(" extends "); //$NON-NLS-1$				} else {					buffer.append(" super "); //$NON-NLS-1$				}				getTypeLabel(bound, flags & JavaElementLabels.T_TYPE_PARAMETERS, buffer);			}		} else if (binding.isArray()) {			getTypeLabel(binding.getElementType(), flags & JavaElementLabels.T_TYPE_PARAMETERS, buffer);			appendDimensions(binding.getDimensions(), buffer);		} else { // type variables, primitive, reftype			String name= binding.getTypeDeclaration().getName();			if (name.length() == 0) {				if (binding.isEnum()) {					buffer.append('{' + JavaElementLabels.ELLIPSIS_STRING + '}');				} else if (binding.isAnonymous()) {					ITypeBinding[] superInterfaces= binding.getInterfaces();					ITypeBinding baseType;					if (superInterfaces.length > 0) {						baseType= superInterfaces[0];					} else {						baseType= binding.getSuperclass();					}					if (baseType != null) {						StringBuffer anonymBaseType= new StringBuffer();						getTypeLabel(baseType, flags & JavaElementLabels.T_TYPE_PARAMETERS, buffer);						buffer.append(Messages.format(JavaUIMessages.JavaElementLabels_anonym_type, anonymBaseType.toString()));					} else {						buffer.append(JavaUIMessages.JavaElementLabels_anonym);					}				} else {					buffer.append("UNKNOWN"); //$NON-NLS-1$				}			} else {				buffer.append(name);			}						if ((flags & JavaElementLabels.T_TYPE_PARAMETERS) != 0) {				if (binding.isGenericType()) {					getTypeParametersLabel(binding.getTypeParameters(), flags, buffer);				} else if (binding.isParameterizedType()) {					getTypeArgumentsLabel(binding.getTypeArguments(), flags, buffer);				}			}		}		if ((flags & JavaElementLabels.T_POST_QUALIFIED) != 0) {			final IMethodBinding declaringMethod= binding.getDeclaringMethod();			final ITypeBinding declaringType= binding.getDeclaringClass();			if (declaringMethod != null) {				buffer.append(JavaElementLabels.CONCAT_STRING);				getMethodLabel(declaringMethod, JavaElementLabels.T_FULLY_QUALIFIED | (flags & JavaElementLabels.P_COMPRESSED), buffer);			} else if (declaringType != null) {				getTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & JavaElementLabels.P_COMPRESSED), buffer);			} else {				final IPackageBinding pack= binding.getPackage();				if (pack != null && !pack.isUnnamed()) {					buffer.append(JavaElementLabels.CONCAT_STRING);					buffer.append(pack.getName());				}			}		}	}