diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallGraph.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallGraph.java index 1e5e8f7..7c82b70 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallGraph.java @@ -75,6 +75,19 @@ dstObjNode.addInEdge(edge); } + public void addAncestorNodes(ResourceNode node) { + addNode(node); + + ResourceNode parent = node.getParent(); + StatefulObjectNode statefulObjectNode = statefulObjMap.get(node); + if (parent != null) { + addAncestorNodes(parent); + + StatefulObjectNode parentStatefulObjectNode = statefulObjMap.get(parent); + parentStatefulObjectNode.addChild(statefulObjectNode); + } + } + public StatefulObjectNode getStatefulObjectNode(ResourceNode resNode) { return statefulObjMap.get(resNode); } diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java index 3a89dce..bcaef89 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java @@ -121,9 +121,12 @@ return allNodeSets; } + // TODO: エッジだけでけくノードも一緒に追加する private void createEdgeChain(CallGraph callGraph, ResourceNode sourceNode, ResourceNode destinationNode, PushPullValue option) { - Deque path = new ArrayDeque<>(); + callGraph.addAncestorNodes(sourceNode); + callGraph.addAncestorNodes(destinationNode); + Deque path = new ArrayDeque<>(); ResourceNode currentNode = destinationNode; while (currentNode != null && currentNode != sourceNode) { path.push(currentNode); @@ -142,7 +145,6 @@ } } - // TODO: エッジだけでけくノードも一緒に追加する private void createEdgeChain(CallGraph callGraph, EventChannelObjectNode sourceNode, StatefulObjectNode destinationNode, PushPullValue option) { Deque path = new ArrayDeque<>(); @@ -160,7 +162,7 @@ if (to == null) { continue; } - callGraph.insertEdge(from, to, option, 0); + callGraph.insertEdge(from, to, option, 0); // TODO: Set a call order properly } } }