class AbstractInstanceInvokeExpr extends AbstractInvokeExpr implements InstanceInvokeExpr {

  protected final ValueBox baseBox;

  protected AbstractInstanceInvokeExpr(SootMethodRef methodRef, ValueBox baseBox, ValueBox[] argBoxes) {
    super(methodRef, argBoxes);
    this.baseBox = baseBox;
  }

  @Override
  public Value getBase() {
    return baseBox.getValue();
  }

  @Override
  public ValueBox getBaseBox() {
    return baseBox;
  }

  @Override
  public void setBase(Value base) {
    baseBox.setValue(base);
  }

  @Override
  public List<ValueBox> getUseBoxes() {<FILL_FUNCTION_BODY>}
}

    List<ValueBox> list = new ArrayList<ValueBox>(baseBox.getValue().getUseBoxes());
    list.add(baseBox);

    if (argBoxes != null) {
      Collections.addAll(list, argBoxes);
      for (ValueBox element : argBoxes) {
        list.addAll(element.getValue().getUseBoxes());
      }
    }

    return list;
  
<methods>public abstract java.lang.Object clone() ,public soot.Value getArg(int) ,public soot.ValueBox getArgBox(int) ,public int getArgCount() ,public List<soot.Value> getArgs() ,public soot.SootMethod getMethod() ,public soot.SootMethodRef getMethodRef() ,public soot.Type getType() ,public List<soot.ValueBox> getUseBoxes() ,public void setArg(int, soot.Value) ,public void setMethodRef(soot.SootMethodRef) <variables>protected final non-sealed soot.ValueBox[] argBoxes,protected soot.SootMethodRef methodRef