class AbstractNegExpr extends AbstractUnopExpr implements NegExpr {

  protected AbstractNegExpr(ValueBox opBox) {
    super(opBox);
  }

  /** Compares the specified object with this one for structural equality. */
  @Override
  public boolean equivTo(Object o) {
    if (o instanceof AbstractNegExpr) {
      return this.opBox.getValue().equivTo(((AbstractNegExpr) o).opBox.getValue());
    }
    return false;
  }

  /** Returns a hash code for this object, consistent with structural equality. */
  @Override
  public int equivHashCode() {
    return opBox.getValue().equivHashCode();
  }

  @Override
  public String toString() {
    return Jimple.NEG + " " + opBox.getValue().toString();
  }

  @Override
  public void toString(UnitPrinter up) {
    up.literal(Jimple.NEG + " ");
    opBox.toString(up);
  }

  @Override
  public Type getType() {<FILL_FUNCTION_BODY>}

  @Override
  public void apply(Switch sw) {
    ((ExprSwitch) sw).caseNegExpr(this);
  }
}

    final Type type = opBox.getValue().getType();

    final IntType tyInt = IntType.v();
    final ByteType tyByte = ByteType.v();
    final ShortType tyShort = ShortType.v();
    final CharType tyChar = CharType.v();
    final BooleanType tyBool = BooleanType.v();
    if (tyInt.equals(type) || tyByte.equals(type) || tyShort.equals(type) || tyChar.equals(type) || tyBool.equals(type)) {
      return tyInt;
    }
    final LongType tyLong = LongType.v();
    if (tyLong.equals(type)) {
      return tyLong;
    }
    final DoubleType tyDouble = DoubleType.v();
    if (tyDouble.equals(type)) {
      return tyDouble;
    }
    final FloatType tyFloat = FloatType.v();
    if (tyFloat.equals(type)) {
      return tyFloat;
    }
    return UnknownType.v();
  
<methods>public abstract java.lang.Object clone() ,public soot.Value getOp() ,public soot.ValueBox getOpBox() ,public final List<soot.ValueBox> getUseBoxes() ,public void setOp(soot.Value) <variables>protected final non-sealed soot.ValueBox opBox