- private void addValueFlowsFromCalleeParam(MethodDescriptor mdCaller,
- NTuple<Location> argLocTuple, NTuple<Location> baseLocTuple, MethodDescriptor mdCallee,
- GlobalFlowNode globalParamNode) {
-
- Set<GlobalFlowNode> visited = new HashSet<GlobalFlowNode>();
- visited.add(globalParamNode);
- recurAddValueFlowsFromCalleeParam(mdCaller, argLocTuple, baseLocTuple, mdCallee,
- globalParamNode);
-
- }
-
- private void recurAddValueFlowsFromCalleeParam(MethodDescriptor mdCaller,
- NTuple<Location> argLocTuple, NTuple<Location> baseLocTuple, MethodDescriptor mdCallee,
- GlobalFlowNode calleeCurNode) {
-
- // FlowGraph calleeFlowGraph = getFlowGraph(mdCallee);
- // GlobalFlowGraph calleeSubGlobalGraph = getSubGlobalFlowGraph(mdCallee);
- //
- // NTuple<Location> curNodeLocTuple = calleeCurNode.getLocTuple();
- // NTuple<Descriptor> curNodeDescTuple = calleeCurNode.getDescTuple();
- // if (calleeFlowGraph.isParameter(curNodeDescTuple)) {
- // curNodeLocTuple = translateToCaller(argLocTuple, curNodeLocTuple);
- // }
- //
- // Set<GlobalFlowNode> outNodeSet =
- // calleeSubGlobalGraph.getOutNodeSet(calleeCurNode);
- // for (Iterator iterator = outNodeSet.iterator(); iterator.hasNext();) {
- // GlobalFlowNode outNode = (GlobalFlowNode) iterator.next();
- //
- // NTuple<Location> curNodeLocTuple = calleeCurNode.getLocTuple();
- // NTuple<Descriptor> curNodeDescTuple = calleeCurNode.getDescTuple();
- // if (calleeFlowGraph.isParameter(curNodeDescTuple)) {
- // curNodeLocTuple = translateToCaller(argLocTuple, curNodeLocTuple);
- // }
- //
- // outNode.getDescTuple();
- //
- // if (calleeFlowGraph.is)
- //
- // if (calleeSubGlobalGraph.isParameter(srcDescTuple)) {
- // // destination node is started with 'parameter'
- // // need to translate it in terms of the caller's a node
- // srcDescTuple =
- // translateToCaller(min, calleeSubGlobalGraph.getParamIdx(srcDescTuple),
- // srcDescTuple);
- // }
- //
- // }
- //
- // Set<FlowEdge> edgeSet =
- // calleeSubGlobalGraph.getOutEdgeSetStartingFrom(calleeSrcNode);
- // for (Iterator iterator = edgeSet.iterator(); iterator.hasNext();) {
- // FlowEdge flowEdge = (FlowEdge) iterator.next();
- //
- // NTuple<Descriptor> srcDescTuple = flowEdge.getInitTuple();
- // NTuple<Descriptor> dstDescTuple = flowEdge.getEndTuple();
- //
- // FlowNode dstNode = calleeSubGlobalGraph.getFlowNode(dstDescTuple);
- //
- // if (calleeSubGlobalGraph.isParameter(srcDescTuple)) {
- // // destination node is started with 'parameter'
- // // need to translate it in terms of the caller's a node
- // srcDescTuple =
- // translateToCaller(min, calleeSubGlobalGraph.getParamIdx(srcDescTuple),
- // srcDescTuple);
- // }
- //
- // if (calleeSubGlobalGraph.isParameter(dstDescTuple)) {
- // // destination node is started with 'parameter'
- // // need to translate it in terms of the caller's a node
- // dstDescTuple =
- // translateToCaller(min, calleeSubGlobalGraph.getParamIdx(dstDescTuple),
- // dstDescTuple);
- // }
- //
- // callerSubGlobalGraph.addValueFlowEdge(srcDescTuple, dstDescTuple);
- //
- // if (!visited.contains(dstNode)) {
- // visited.add(dstNode);
- // recurAddValueFlowsFromCalleeParam(min, calleeSubGlobalGraph, dstNode,
- // callerSubGlobalGraph,
- // dstDescTuple, visited, baseTuple);
- // }
- //
- // }
-
- }
-
- private NTuple<Location> translateToCaller(NTuple<Location> argLocTuple,
- NTuple<Location> curNodeLocTuple) {
-
- NTuple<Location> callerLocTuple = new NTuple<Location>();
-
- callerLocTuple.addAll(argLocTuple);
- for (int i = 1; i < curNodeLocTuple.size(); i++) {
- callerLocTuple.add(curNodeLocTuple.get(i));
- }
-
- return callerLocTuple;
- }
-
- private void recurAddValueFlowsFromCalleeParam(MethodInvokeNode min,
- FlowGraph calleeSubGlobalGraph, FlowNode calleeSrcNode, FlowGraph callerSubGlobalGraph,
- NTuple<Descriptor> callerSrcTuple, Set<FlowNode> visited, NTuple<Descriptor> baseTuple) {
-
- MethodDescriptor mdCallee = calleeSubGlobalGraph.getMethodDescriptor();
-
- // Set<FlowEdge> edgeSet =
- // calleeSubGlobalGraph.getOutEdgeSet(calleeSrcNode);
- Set<FlowEdge> edgeSet = calleeSubGlobalGraph.getOutEdgeSetStartingFrom(calleeSrcNode);
- for (Iterator iterator = edgeSet.iterator(); iterator.hasNext();) {
- FlowEdge flowEdge = (FlowEdge) iterator.next();
-
- NTuple<Descriptor> srcDescTuple = flowEdge.getInitTuple();
- NTuple<Descriptor> dstDescTuple = flowEdge.getEndTuple();
-
- FlowNode dstNode = calleeSubGlobalGraph.getFlowNode(dstDescTuple);
-
- if (calleeSubGlobalGraph.isParameter(srcDescTuple)) {
- // destination node is started with 'parameter'
- // need to translate it in terms of the caller's a node
- srcDescTuple =
- translateToCaller(min, calleeSubGlobalGraph.getParamIdx(srcDescTuple), srcDescTuple);
- }
-
- if (calleeSubGlobalGraph.isParameter(dstDescTuple)) {
- // destination node is started with 'parameter'
- // need to translate it in terms of the caller's a node
- dstDescTuple =
- translateToCaller(min, calleeSubGlobalGraph.getParamIdx(dstDescTuple), dstDescTuple);
- }
-
- callerSubGlobalGraph.addValueFlowEdge(srcDescTuple, dstDescTuple);
-
- if (!visited.contains(dstNode)) {
- visited.add(dstNode);
- recurAddValueFlowsFromCalleeParam(min, calleeSubGlobalGraph, dstNode, callerSubGlobalGraph,
- dstDescTuple, visited, baseTuple);
- }
-
- }
-
- }
-
- private NTuple<Descriptor> translateToCaller(MethodInvokeNode min, int paramIdx,
- NTuple<Descriptor> srcDescTuple) {
-
- NTuple<Descriptor> callerTuple = new NTuple<Descriptor>();
-
- NTuple<Descriptor> argTuple = mapMethodInvokeNodeToArgIdxMap.get(min).get(paramIdx);
-
- for (int i = 0; i < argTuple.size(); i++) {
- callerTuple.add(argTuple.get(i));
- }
-
- for (int i = 1; i < srcDescTuple.size(); i++) {
- callerTuple.add(srcDescTuple.get(i));
- }
-
- return callerTuple;
- }
-
- private NTuple<Descriptor> traslateToCalleeParamTupleToCallerArgTuple(
- NTuple<Descriptor> calleeInitTuple, NTuple<Descriptor> callerSrcTuple) {
-
- NTuple<Descriptor> callerInitTuple = new NTuple<Descriptor>();
-
- for (int i = 0; i < callerSrcTuple.size(); i++) {
- callerInitTuple.add(callerSrcTuple.get(i));
- }
-
- for (int i = 1; i < calleeInitTuple.size(); i++) {
- callerInitTuple.add(calleeInitTuple.get(i));
- }
-
- return callerInitTuple;
- }
-