diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromControlFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromControlFlowGraph.java index 16c59be..1b449d4 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromControlFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromControlFlowGraph.java @@ -518,7 +518,7 @@ component.addMethod(updateOrInput); } - if (node.getOutdegree() == 1 && resourcesToReturn != null + if (node.getOutdegree() == 1 && resourcesToReturn != null && resourcesToReturn.size() > 0 && resourcesToReturn.equals(dataFlowInform.get(node.getOutEdges().iterator().next()).get(PushPullValue.PULL))) { // Directly returns the returned value. Edge outEdge = node.getOutEdges().iterator().next(); @@ -600,6 +600,7 @@ ResourceNode resourceNode = ((StatefulObjectNode) node).getResource(); if (((StoreAttribute) resourceNode.getAttribute()).isStored()) { try { + boolean stateUpdateAdded = false; for (Edge e: resourceNode.getInEdges()) { DataFlowEdge re = (DataFlowEdge) e; for (ChannelMember in: re.getChannel().getInputChannelMembers()) { @@ -616,11 +617,14 @@ updateStatement = sideEffects[0] + langSpec.getFieldAccessor(fieldOfResourceState) + langSpec.getAssignment() + curState + langSpec.getStatementDelimiter(); // this.value = ... } update.addFirstStatement(updateStatement); + stateUpdateAdded = true; break; } } } + if (stateUpdateAdded) break; } + if (stateUpdateAdded) break; } } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e1) {