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

  private final boolean DUMP_RESULTS;

  public JimpleIDESolver(IDETabulationProblem<Unit, D, SootMethod, V, I> problem) {
    this(problem, false);
  }

  public JimpleIDESolver(IDETabulationProblem<Unit, D, SootMethod, V, 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<String> res = new ArrayList<String>();
      for (Cell<Unit, D, V> 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(methodOf + ";" + entry.getRowKey() + "@" + i + ";" + entry.getColumnKey() + ";" + entry.getValue());
      }
      Collections.sort(res);
      for (String string : res) {
        out.println(string);
      }
      out.flush();
      out.close();
    } catch (FileNotFoundException e) {
      logger.error(e.getMessage(), e);
    }
  
<methods>public void <init>(IDETabulationProblem<soot.Unit,D,soot.SootMethod,V,I>) ,public void <init>(IDETabulationProblem<soot.Unit,D,soot.SootMethod,V,I>, CacheBuilder#RAW, CacheBuilder#RAW) ,public void printStats() ,public V resultAt(soot.Unit, D) ,public Map<D,V> resultsAt(soot.Unit) ,public void solve() <variables>public static boolean DEBUG,public static CacheBuilder<java.lang.Object,java.lang.Object> DEFAULT_CACHE_BUILDER,protected final EdgeFunction<V> allTop,protected final boolean computeValues,protected Table<soot.Unit,soot.Unit,Map<D,Set<D>>> computedInterPEdges,protected Table<soot.Unit,soot.Unit,Map<D,Set<D>>> computedIntraPEdges,public long durationFlowFunctionApplication,public long durationFlowFunctionConstruction,protected final EdgeFunctions<soot.Unit,D,soot.SootMethod,V> edgeFunctions,protected final EdgeFunctionCache<soot.Unit,D,soot.SootMethod,V> efCache,protected final Table<soot.Unit,D,Table<soot.Unit,D,EdgeFunction<V>>> endSummary,protected heros.solver.CountingThreadPoolExecutor executor,protected final FlowFunctionCache<soot.Unit,D,soot.SootMethod> ffCache,public long flowFunctionApplicationCount,public long flowFunctionConstructionCount,protected final FlowFunctions<soot.Unit,D,soot.SootMethod> flowFunctions,protected final boolean followReturnsPastSeeds,protected final I icfg,protected final Table<soot.Unit,D,Map<soot.Unit,Set<D>>> incoming,protected final Map<soot.Unit,Set<D>> initialSeeds,protected final JumpFunctions<soot.Unit,D,V> jumpFn,protected static final org.slf4j.Logger logger,protected int numThreads,public long propagationCount,private boolean recordEdges,protected final Set<soot.Unit> unbalancedRetSites,protected final Table<soot.Unit,D,V> val,protected final MeetLattice<V> valueLattice,protected final D zeroValue