예제 #1
0
  /* 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(">");
    }
  }