diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java index 2b2cd4f..9566dd6 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowGraph.java @@ -31,8 +31,19 @@ // A resource to channel edge PushPullAttribute pushPull = ((PushPullAttribute) ((DataFlowEdge) resToCh).getAttribute()); ResourceNode srcResNode = (ResourceNode) resToCh.getSource(); - ChannelNode chNode = (ChannelNode) resToCh.getDestination(); - for (Edge chToRes: chNode.getOutEdges()) { + ChannelNode directDstChNode = (ChannelNode) resToCh.getDestination(); + // Should take into account the channel hierarchy. + Set ancestorDstChannels = directDstChNode.getAncestors(); + Set descendantDstChannels = directDstChNode.getDescendants(); + Set outEdges = new HashSet<>(); + outEdges.addAll(directDstChNode.getOutEdges()); + for (ChannelNode ancestorDst: ancestorDstChannels) { + outEdges.addAll(ancestorDst.getOutEdges()); + } + for (ChannelNode descendantDst: descendantDstChannels) { + outEdges.addAll(descendantDst.getOutEdges()); + } + for (Edge chToRes: outEdges) { ResourceNode dstResNode = (ResourceNode) chToRes.getDestination(); if (!CodeGenerator.generatesComponent(srcResNode.getResourceHierarchy())) { srcResNode = srcResNode.getParent(); diff --git a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/StatefulObjectNode.java b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/StatefulObjectNode.java index a1e50cd..5da7262 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/StatefulObjectNode.java +++ b/AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/StatefulObjectNode.java @@ -1,10 +1,14 @@ package models.controlFlowModel; +import java.util.HashSet; +import java.util.Set; + import models.dataFlowModel.ResourceNode; public class StatefulObjectNode extends ObjectNode { private ResourceNode resource; - + private Set children = new HashSet<>(); + public StatefulObjectNode(ResourceNode resource) { super(resource.getResourceName()); this.resource = resource; @@ -14,4 +18,11 @@ return resource; } + public void addChild(ObjectNode child) { + children.add(child); + } + + public Set getChildren() { + return children; + } }