/* TYPE PARAMETERS */ private void renderTypeParameter( @NotNull TypeParameterDescriptor typeParameter, @NotNull StringBuilder builder, boolean topLevel) { if (topLevel) { builder.append(lt()); } if (verbose) { builder.append("/*").append(typeParameter.getIndex()).append("*/ "); } if (typeParameter.isReified()) { builder.append(renderKeyword("reified")).append(" "); } String variance = typeParameter.getVariance().toString(); if (!variance.isEmpty()) { builder.append(renderKeyword(variance)).append(" "); } renderName(typeParameter, builder); int upperBoundsCount = typeParameter.getUpperBounds().size(); if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) { JetType upperBound = typeParameter.getUpperBounds().iterator().next(); if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound) || alwaysRenderAny) { builder.append(" : ").append(renderType(upperBound)); } } else if (topLevel) { boolean first = true; for (JetType upperBound : typeParameter.getUpperBounds()) { if (upperBound.equals(KotlinBuiltIns.getInstance().getDefaultBound())) { continue; } if (first) { builder.append(" : "); } else { builder.append(" & "); } builder.append(renderType(upperBound)); first = false; } } else { // rendered with "where" } if (topLevel) { builder.append(">"); } }