public static void printNodeNumberMapping(String fileName, PAG pag) { try { PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { VarNode vn = (VarNode) iter.next(); pw.println(vn.getNumber() + "\t" + vn); } pw.close(); } catch (FileNotFoundException e) { logger.error(e.getMessage(), e); } }
public static void dumpVarNodeInfo(final PAG pag) { PrintWriter varNodeWriter = null; try { varNodeWriter = new PrintWriter(new BufferedWriter(new FileWriter("varNodeInfo"))); } catch (IOException e) { logger.error(e.getMessage(), e); } for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { VarNode varNode = (VarNode) iter.next(); varNodeWriter.println(varNode.getNumber() + " " + varNode); } varNodeWriter.flush(); varNodeWriter.close(); }
public void traceNode(int id) { buildVmatchEdges(); String fName = "trace." + id + ".dot"; try { FileOutputStream fos = new FileOutputStream(new File(fName)); PrintStream ps = new PrintStream(fos); ps.println("digraph G {"); // iterate over all variable nodes for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { final VarNode n = (VarNode) iter.next(); if (n.getNumber() == id) { LocalVarNode lvn = (LocalVarNode) n; printOneNode(lvn); trace(lvn, ps, new HashSet<Node>(), TRACE_MAX_LVL); } } ps.print("}"); ps.close(); fos.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } }
final PrintWriter file = new PrintWriter(new FileOutputStream(new File(output_dir, "solution"))); file.println("Solution:"); for (Iterator vnIt = pag.getVarNodeNumberer().iterator(); vnIt.hasNext();) { final VarNode vn = (VarNode) vnIt.next(); if (vn.getReplacement() != vn) {
for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { final VarNode n = (VarNode) iter.next();
public void dump() { for (Iterator vIt = pag.getVarNodeNumberer().iterator(); vIt.hasNext();) { final VarNode v = (VarNode) vIt.next(); mergedNodes.put(v.getReplacement(), v); if (v instanceof LocalVarNode) { SootMethod m = ((LocalVarNode) v).getMethod(); if (m != null) { methodToNodes.put(m, v); } } } try { JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(new File(output_dir, "pag.jar"))); for (Iterator vIt = mergedNodes.keySet().iterator(); vIt.hasNext();) { final VarNode v = (VarNode) vIt.next(); dumpVarNode(v, jarOut); } for (Iterator mIt = methodToNodes.keySet().iterator(); mIt.hasNext();) { final SootMethod m = (SootMethod) mIt.next(); dumpMethod(m, jarOut); } addSymLinks(pag.getVarNodeNumberer().iterator(), jarOut); jarOut.close(); } catch (IOException e) { throw new RuntimeException("Couldn't dump html" + e); } }
private void dumpLocalPAG(String cName, String mName, final PrintStream ps) { // this.queryMethod = mName; // iterate over all variable nodes for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { final Node node = (Node) iter.next(); if (!(node instanceof LocalVarNode)) { continue; } final LocalVarNode lvNode = (LocalVarNode) node; // nodes that is defined in the specified class and method if (isDefinedIn(lvNode, cName, mName)) { dumpForwardReachableNodesFrom(lvNode, ps); } } // for (Iterator iter = pag.getFieldRefNodeNumberer().iterator(); iter // .hasNext();) { // final FieldRefNode frNode = (FieldRefNode) iter.next(); // // if (frNode.getBase().) // Node[] succs = pag.storeInvLookup(frNode); // for (int i = 0; i < succs.length; i++) { // ps.println("\t" + translateLabel(succs[i])); // // print edge // ps.println("\t" + translateEdge(frNode, succs[i], "store")); // } // } }
private void dumpLocalP2Set(String mName, final PrintStream ps) { for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { VarNode vNode = (VarNode) iter.next(); if (vNode instanceof LocalVarNode) { final LocalVarNode lvNode = (LocalVarNode) vNode; if (lvNode.getMethod() != null && lvNode.getMethod().getName().equals(mName)) { ps.println("\t" + makeNodeName(lvNode) + " [label=\"" + makeLabel(lvNode) + "\"];"); lvNode.getP2Set().forall(new P2SetToDotPrinter(lvNode, ps)); } } } }
@SuppressWarnings("unused") private String assignEdgesWellFormed(PAG pag) { for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { VarNode v = (VarNode) iter.next(); Set<AssignEdge> outgoingAssigns = getAssignBarEdges(v); for (AssignEdge edge : outgoingAssigns) { if (edge.getSrc() != v) { return edge + " src should be " + v; } } Set<AssignEdge> incomingAssigns = getAssignEdges(v); for (AssignEdge edge : incomingAssigns) { if (edge.getDst() != v) { return edge + " dst should be " + v; } } } return null; }
HashSet<Type> actualTypes = new HashSet<Type>(); HashSet<SparkField> allFields = new HashSet<SparkField>(); for (Iterator nIt = pag.getVarNodeNumberer().iterator(); nIt.hasNext();) { final Node n = (Node) nIt.next(); Type t = n.getType(); for (Iterator nIt = pag.getVarNodeNumberer().iterator(); nIt.hasNext();) { final Node n = (Node) nIt.next(); if (n.getReplacement() != n) {
for (Iterator iter = pag.getVarNodeNumberer().iterator(); iter.hasNext();) { VarNode varNode = (VarNode) iter.next(); if (varNode instanceof LocalVarNode) {
for (Iterator<VarNode> it = getVarNodeNumberer().iterator(); it.hasNext();) { VarNode vn = it.next(); IVarAbstraction pn = makeInternalNode(vn); for (Iterator<AllocDotField> it = getAllocDotFieldNodeNumberer().iterator(); it.hasNext();) { AllocDotField adf = it.next(); for (Iterator<AllocNode> it = getAllocNodeNumberer().iterator(); it.hasNext();) { AllocNode obj = it.next(); IVarAbstraction pn = makeInternalNode(obj);