class ParameterRef implements IdentityRef {
  int n;
  Type paramType;

  /** Constructs a ParameterRef object of the specified type, representing the specified parameter number. */
  public ParameterRef(Type paramType, int number) {
    this.n = number;
    this.paramType = paramType;
  }

  public boolean equivTo(Object o) {
    if (o instanceof ParameterRef) {
      return n == ((ParameterRef) o).n && paramType.equals(((ParameterRef) o).paramType);
    }
    return false;
  }

  public int equivHashCode() {
    return n * 101 + paramType.hashCode() * 17;
  }

  /** Create a new ParameterRef object with the same paramType and number. */
  public Object clone() {
    return new ParameterRef(paramType, n);
  }

  /** Converts the given ParameterRef into a String i.e. <code>@parameter0: .int</code>. */
  public String toString() {<FILL_FUNCTION_BODY>}

  public void toString(UnitPrinter up) {
    up.identityRef(this);
  }

  /** Returns the index of this ParameterRef. */
  public int getIndex() {
    return n;
  }

  /** Sets the index of this ParameterRef. */
  public void setIndex(int index) {
    n = index;
  }

  @Override
  public final List<ValueBox> getUseBoxes() {
    return Collections.emptyList();
  }

  /** Returns the type of this ParameterRef. */
  public Type getType() {
    return paramType;
  }

  /** Used with RefSwitch. */
  public void apply(Switch sw) {
    ((RefSwitch) sw).caseParameterRef(this);
  }
}

    return "@parameter" + n + ": " + paramType;
  
<no_super_class>