- if (!visited.contains(incomingNode)) {
- visited.add(incomingNode);
- getIncomingFlowNodeSet(incomingNode, visited);
- }
- }
- }
- }
-
- }
-
- public Set<NTuple<Location>> getIncomingFlowTupleSet(FlowNode fn) {
-
- NTuple<Descriptor> dstTuple = fn.getDescTuple();
-
- Set<NTuple<Location>> set = new HashSet<NTuple<Location>>();
-
- ClassDescriptor cd = null;
-
- for (Iterator iterator = getNodeSet().iterator(); iterator.hasNext();) {
- FlowNode node = (FlowNode) iterator.next();
-
- Set<FlowEdge> edgeSet = getOutEdgeSet(node);
- for (Iterator iterator2 = edgeSet.iterator(); iterator2.hasNext();) {
- FlowEdge flowEdge = (FlowEdge) iterator2.next();
- if (dstTuple.equals(flowEdge.getEndTuple())) {
- NTuple<Descriptor> initTuple = flowEdge.getInitTuple();
- NTuple<Location> locTuple = new NTuple<Location>();
- for (int i = 0; i < initTuple.size(); i++) {
- Descriptor d = initTuple.get(i);
- Location loc;
- if (i == 0) {
- loc = new Location(md, d.getSymbol());
- cd = ((VarDescriptor) d).getType().getClassDesc();
- } else {
- loc = new Location(cd, d.getSymbol());
- cd = ((FieldDescriptor) d).getType().getClassDesc();
+ if (incomingNode instanceof FlowReturnNode) {
+ FlowReturnNode rnode = (FlowReturnNode) incomingNode;
+ Set<NTuple<Descriptor>> nodeTupleSet = rnode.getTupleSet();
+ for (Iterator iterator3 = nodeTupleSet.iterator(); iterator3.hasNext();) {
+ NTuple<Descriptor> nodeTuple = (NTuple<Descriptor>) iterator3.next();
+ FlowNode fn = getFlowNode(nodeTuple);
+ if (!visited.contains(fn)) {
+ visited.add(fn);
+ getIncomingFlowNodeSet(fn, visited);
+ }
+ }
+ } else {
+ if (!visited.contains(incomingNode)) {
+ visited.add(incomingNode);
+ getIncomingFlowNodeSet(incomingNode, visited);