class JimpleIFDSSolver<D, I extends InterproceduralCFG<Unit, SootMethod>> extends IFDSSolver<Unit, D, SootMethod, I> {
  private static final Logger logger = LoggerFactory.getLogger(JimpleIFDSSolver.class);

  private final boolean DUMP_RESULTS;

  public JimpleIFDSSolver(IFDSTabulationProblem<Unit, D, SootMethod, I> problem) {
    this(problem, false);
  }

  public JimpleIFDSSolver(IFDSTabulationProblem<Unit, D, SootMethod, I> problem, boolean dumpResults) {
    super(problem);
    this.DUMP_RESULTS = dumpResults;
  }

  @Override
  public void solve() {
    super.solve();
    if (DUMP_RESULTS) {
      dumpResults();
    }
  }

  public void dumpResults() {<FILL_FUNCTION_BODY>}

}

    try {
      PrintWriter out = new PrintWriter(new FileOutputStream("ideSolverDump" + System.currentTimeMillis() + ".csv"));
      List<SortableCSVString> res = new ArrayList<SortableCSVString>();
      for (Cell<Unit, D, ?> entry : val.cellSet()) {
        SootMethod methodOf = (SootMethod) icfg.getMethodOf(entry.getRowKey());
        PatchingChain<Unit> units = methodOf.getActiveBody().getUnits();
        int i = 0;
        for (Unit unit : units) {
          if (unit == entry.getRowKey()) {
            break;
          }
          i++;
        }

        res.add(new SortableCSVString(
            methodOf + ";" + entry.getRowKey() + "@" + i + ";" + entry.getColumnKey() + ";" + entry.getValue(), i));
      }
      Collections.sort(res);
      // replacement is bugfix for excel view:
      for (SortableCSVString string : res) {
        out.println(string.value.replace("\"", "'"));
      }
      out.flush();
      out.close();
    } catch (FileNotFoundException e) {
      logger.error(e.getMessage(), e);
    }
  
<methods>public void <init>(IFDSTabulationProblem<soot.Unit,D,soot.SootMethod,I>) ,public Set<D> ifdsResultsAt(soot.Unit) <variables>private static final EdgeFunction<heros.solver.IFDSSolver.BinaryDomain> ALL_BOTTOM