private void createInitalNodesAndFlow( final Map<PDGNode, Node> pdg2cfg, final ModRefCandidates modref, final PDG pdg) { final Node nEntry = createNOPNode(pdg.entry); this.entry = nEntry; pdg2cfg.put(pdg.entry, nEntry); final Node nExit = createNOPNode(pdg.exit); this.exit = nExit; pdg2cfg.put(pdg.exit, nExit); for (final PDGField fref : pdg.getFieldReads()) { if (!fref.field.isStatic()) { final SSAInstruction instr = pdg.getInstruction(fref.node); final ModRefFieldCandidate refCand = modref.createRefCandidate(pdg.cgNode, instr); final Node n = createNode(refCand, fref.accfield, Node.Kind.READ); pdg2cfg.put(fref.accfield, n); } } for (final PDGField fmod : pdg.getFieldWrites()) { if (!fmod.field.isStatic()) { final SSAInstruction instr = pdg.getInstruction(fmod.node); final ModRefFieldCandidate refCand = modref.createModCandidate(pdg.cgNode, instr); final Node n = createNode(refCand, fmod.accfield, Node.Kind.WRITE); pdg2cfg.put(fmod.accfield, n); } } for (final PDGNode pn : pdg.vertexSet()) { if (pn.getPdgId() == pdg.getId() && !pdg2cfg.containsKey(pn)) { final Node n = createNOPNode(pn); pdg2cfg.put(pn, n); } } for (final PDGEdge e : pdg.edgeSet()) { if (e.kind == PDGEdge.Kind.CONTROL_FLOW || e.kind == PDGEdge.Kind.CONTROL_FLOW_EXC) { final Node from = pdg2cfg.get(e.from); final Node to = pdg2cfg.get(e.to); addEdge(from, to); } } }