protected JsonObject toJson(LocalPointerKey ptr) { JsonObjectBuilder builder = Json.createObjectBuilder(); builder.add("type", "LocalPointerKey"); builder.add("method", ptr.getNode().getMethod().getSignature()); builder.add("valueNumber", ptr.getValueNumber()); return builder.build(); }
/** @param pk value being def'fed by a call instruction (either normal or exceptional) */ private void addReturnEdges(LocalPointerKey pk, SSAInvokeInstruction callInstr) { boolean isExceptional = pk.getValueNumber() == callInstr.getException(); // get call targets Collection<CGNode> possibleCallees = cg.getPossibleTargets(pk.getNode(), callInstr.getCallSite()); // construct graph for each target for (CGNode callee : possibleCallees) { addSubgraphForNode(callee); PointerKey retVal = isExceptional ? heapModel.getPointerKeyForExceptionalReturnValue(callee) : heapModel.getPointerKeyForReturnValue(callee); assert containsNode(retVal); addEdge(pk, retVal); } }