diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java index bcaef89..d829449 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java @@ -31,7 +31,18 @@ PushPullAttribute edgeAttribute = ((PushPullAttribute) resourceToChannelEdge.getAttribute()); ChannelNode middleChannelNode = (ChannelNode) resourceToChannelEdge.getDestination(); - for (Edge channelToResourceEdge : middleChannelNode.getOutEdges()) { + // Should take into account the channel hierarchy. + Set ancestorDstChannels = middleChannelNode.getAncestors(); + Set descendantDstChannels = middleChannelNode.getDescendants(); + Set outEdges = new HashSet<>(); + outEdges.addAll(middleChannelNode.getOutEdges()); + for (ChannelNode ancestorDst : ancestorDstChannels) { + outEdges.addAll(ancestorDst.getOutEdges()); + } + for (ChannelNode descendantDst : descendantDstChannels) { + outEdges.addAll(descendantDst.getOutEdges()); + } + for (Edge channelToResourceEdge : outEdges) { ResourceNode sourceNode = (ResourceNode) resourceToChannelEdge.getSource(); ResourceNode destinationNode = (ResourceNode) channelToResourceEdge.getDestination(); if (!CodeGenerator.generatesComponent(sourceNode.getResourceHierarchy())) { // sourceNode is a leaf node