diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java index 00d38ad..2b2cd4f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Set; +import generators.CodeGenerator; import models.Edge; import models.Node; import models.algebra.Expression; @@ -32,13 +33,21 @@ ResourceNode srcResNode = (ResourceNode) resToCh.getSource(); ChannelNode chNode = (ChannelNode) resToCh.getDestination(); for (Edge chToRes: chNode.getOutEdges()) { - ResourceNode dstResNode = (ResourceNode) chToRes.getDestination(); - if (pushPull.getOptions().get(0) == PushPullValue.PUSH) { - // same direction as the data flow - pushCallGraph.addEdge(srcResNode, dstResNode, PushPullValue.PUSH); - } else { - // reverse direction to the data flow - pullCallGraph.addEdge(dstResNode, srcResNode, PushPullValue.PULL); + ResourceNode dstResNode = (ResourceNode) chToRes.getDestination(); + if (!CodeGenerator.generatesComponent(srcResNode.getResourceHierarchy())) { + srcResNode = srcResNode.getParent(); + } + if (!CodeGenerator.generatesComponent(dstResNode.getResourceHierarchy())) { + dstResNode = dstResNode.getParent(); + } + if (!srcResNode.getResourceHierarchy().equals(dstResNode.getResourceHierarchy())) { + if (pushPull.getOptions().get(0) == PushPullValue.PUSH) { + // same direction as the data flow + pushCallGraph.addEdge(srcResNode, dstResNode, PushPullValue.PUSH); + } else { + // reverse direction to the data flow + pullCallGraph.addEdge(dstResNode, srcResNode, PushPullValue.PULL); + } } } } @@ -56,6 +65,9 @@ } } for (ResourceNode dstResNode: dataFlowGraph.getResourceNodes(cm.getResource().getResourceHierarchy())) { + if (!CodeGenerator.generatesComponent(dstResNode.getResourceHierarchy())) { + dstResNode = dstResNode.getParent(); + } StatefulObjectNode dstNode = pushCallGraph.getStatefulObjectNode(dstResNode); if (dstNode == null) { pushCallGraph.addNode(dstResNode);