/** Expensive! */ private void dumpCallGraphReachablesCSV() { try { FileWriter fw = new FileWriter(Project.v().getOutputDir() + File.separator + "reachables-count.csv"); fw.write("Method,Reachables"); for (MethodOrMethodContext momc : getReachableMethodContexts()) { if ("<clinit>".equals(momc.method().getName())) continue; Set<MethodOrMethodContext> c = new HashSet<MethodOrMethodContext>(); c.add(momc); Filter filter = new Filter(noStaticInits); // filter on static initializers, hopefully they won't show in the stats, // or any calls that they make... ReachableMethods rm = new ReachableMethods(callGraph, c.iterator(), filter); rm.update(); QueueReader<MethodOrMethodContext> edges = rm.listener(); int reachables = 0; while (edges.hasNext()) { MethodOrMethodContext reachable = edges.next(); if ("<clinit>".equals(reachable.method().getName())) continue; reachables++; } fw.write(momc + "|" + reachables + "\n"); } fw.close(); } catch (IOException e) { } }
private void processReachables() { reachableMethods.update(); while (reachablesReader.hasNext()) { MethodOrMethodContext m = (MethodOrMethodContext) reachablesReader.next(); MethodPAG mpag = MethodPAG.v(pag, m.method()); mpag.build(); mpag.addToPAG(m.context()); } }
private void processCallEdges() { Stmt s = null; while (callEdges.hasNext()) { Edge e = (Edge) callEdges.next(); MethodPAG amp = MethodPAG.v(pag, e.tgt()); amp.build(); amp.addToPAG(e.tgtCtxt()); pag.addCallTarget(e); } }