class New2InitFlowAnalysis extends BackwardFlowAnalysis<Unit, FlowSet> {

  FlowSet emptySet = new ArraySparseSet();

  public New2InitFlowAnalysis(DirectedGraph<Unit> graph) {
    super(graph);

    doAnalysis();
  }

  @Override
  protected void flowThrough(FlowSet in, Unit d, FlowSet out) {<FILL_FUNCTION_BODY>}

  @Override
  protected FlowSet newInitialFlow() {
    return emptySet.clone();
  }

  @Override
  protected FlowSet entryInitialFlow() {
    return emptySet.clone();
  }

  @Override
  protected void merge(FlowSet in1, FlowSet in2, FlowSet out) {
    in1.union(in2, out);
  }

  @Override
  protected void copy(FlowSet source, FlowSet dest) {
    source.copy(dest);
  }
}

    in.copy(out);

    if (d instanceof DefinitionStmt) {
      DefinitionStmt ds = (DefinitionStmt) d;
      if (ds.getRightOp() instanceof NewExpr) {
        Value v = ds.getLeftOp();
        if (v instanceof Local && in.contains(v)) {
          out.remove(v);
        }
      }
    } else {
      for (ValueBox useBox : d.getUseBoxes()) {
        Value v = useBox.getValue();
        if (v instanceof Local) {
          out.add(v);
        }
      }
    }
    /*
     * else if (d instanceof InvokeStmt) { InvokeExpr ie = ((InvokeStmt)d).getInvokeExpr(); if (ie instanceof
     * SpecialInvokeExpr) { Value v = ((SpecialInvokeExpr)ie).getBase(); if (v instanceof Local && !inf.contains(v))
     * outf.add(v); } }
     */
  
<methods>public void <init>(DirectedGraph<soot.Unit>) <variables>