private void renderFormalTypeParameters(JavaBytecodeSyntaxDrawer sd, Imports ia, List<FormalTypeParameter> typeParams) {
		boolean displayExtendsObject = SystemFacade.getInstance().getPreferences().isSettingTrue(Settings.DISPLAY_EXTENDS_OBJECT);
		if (typeParams != null && typeParams.size() > 0) {
			sd.drawDefault("<");
			boolean isFirstTypeParam = true;
			for (FormalTypeParameter typeParam : typeParams) {
				if (isFirstTypeParam) {
					isFirstTypeParam = false;
				} else {
					sd.drawDefault(", ");
				}
				sd.drawDefault(typeParam.getIdentifier());
				List<GenericJavaType> union = typeParam.getTypeUnion();
				if (union.size() == 1 && union.get(0).getBaseType().equals(JavaType.JAVA_LANG_OBJECT)) {
					// special case where there's just extends Object
					if (displayExtendsObject) {
						sd.drawKeyword(" extends ");
						sd.drawDefault(ia.getShortName(JavaType.JAVA_LANG_OBJECT.toString()));
					}
				} else {
					sd.drawKeyword(" extends ");
					boolean isFirstType = true;
					for (GenericJavaType gjt : union) {
						if (isFirstType) {
							isFirstType = false;
						} else {
							sd.drawDefault(" & ");
						}
						renderGenericJavaType(sd, ia, gjt);
					}
				}
			}
			sd.drawDefault(">");
		}
	}