diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index cd3f385..acfbf44 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -259,7 +259,7 @@ } protected void updateMainComponent(TypeDeclaration mainType, MethodDeclaration mainConstructor, Node componentNode, - MethodDeclaration constructor, ILanguageSpecific langSpec) { + MethodDeclaration constructor, final List depends, ILanguageSpecific langSpec) { // Declare the field to refer to each object in the main type. ResourceNode resNode = null; String nodeName = null; @@ -275,6 +275,9 @@ } // Add a statement to instantiate each object to the main constructor. List parameters = new ArrayList<>(); + for (ResourceHierarchy res: depends) { + parameters.add(res.getResourceName()); + } if (constructor.getParameters() != null) { for (VariableDeclaration var: constructor.getParameters()) { parameters.add(var.getName()); diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java index ca71bfd..d562e39 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java @@ -83,7 +83,7 @@ if (resourceNode.getResourceHierarchy().getParent() == null) { // For each root resource // Update the main component for this component. - updateMainComponent(mainComponent, mainConstructor, componentNode, constructor, langSpec); + updateMainComponent(mainComponent, mainConstructor, componentNode, constructor, depends, langSpec); } // Declare the fields to refer to reference resources. @@ -379,7 +379,6 @@ // leaf resource. FieldDeclaration stateField = langSpec.newFieldDeclaration(resStateType, fieldOfResourceState, langSpec.getFieldInitializer(resStateType, resourceNode.getResourceHierarchy().getInitialValue())); component.addField(stateField); - constructorParams.add(new AbstractMap.SimpleEntry<>(resourceNode.getResourceHierarchy(), langSpec.newVariableDeclaration(resStateType, langSpec.toVariableName(resourceName)))); } else { ResourceHierarchy child = children.iterator().next(); if (children.size() == 1 && child.getNumParameters() > 0) { @@ -1442,7 +1441,9 @@ for (Selector selector: ch.getAllSelectors()) { if (selector.getExpression() instanceof Variable) { Variable selVar = (Variable) selector.getExpression(); - args.add(selVar.getName()); + if (!args.contains(selVar.getName())) { + args.add(selVar.getName()); + } } } // Values of message parameters. @@ -1457,9 +1458,11 @@ } } if (refVarName != null) { - args.add(refVarName); + if (!args.contains(refVarName)) { + args.add(refVarName); + } } else { - args.add(varEnt.getValue().getName()); + if (!args.contains(varEnt.getValue().getName())) args.add(varEnt.getValue().getName()); } } } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java index 9c48e28..f0b2bc0 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java @@ -245,7 +245,6 @@ // leaf resource. Type fieldType = getImplStateType(res); component.addField(new FieldDeclaration(fieldType, "value", getInitializer(res))); - constructorParams.add(new AbstractMap.SimpleEntry<>(resourceNode.getResourceHierarchy(), new VariableDeclaration(fieldType, toVariableName(resourceName)))); } else { ResourceHierarchy child = children.iterator().next(); if (children.size() == 1 && child.getNumParameters() > 0) { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java index 9458d5b..aef4145 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java @@ -766,13 +766,11 @@ } } Expression resExp = JavaCodeGenerator.pullAccessor.getDirectStateAccessorFor(out.getResource(), null); - String args = ""; - String delimiter = ""; + List args = new ArrayList<>(); if (resExp instanceof Term) { // to access the parent if (((Term) resExp).getChildren().size() > 1 && ((Term) resExp).getChild(1) instanceof Variable) { - args += delimiter + ((Variable)((Term) resExp).getChild(1)).getName(); - delimiter = ", "; + args.add(((Variable)((Term) resExp).getChild(1)).getName()); } resExp = ((Term) resExp).getChild(0); } @@ -781,8 +779,9 @@ for (Selector selector: ch.getAllSelectors()) { if (selector.getExpression() instanceof Variable) { Variable selVar = (Variable) selector.getExpression(); - args += delimiter + selVar.getName(); - delimiter = ", "; + if (!args.contains(selVar.getName())) { + args.add(selVar.getName()); + } } } // Values of message parameters. @@ -797,14 +796,23 @@ } } if (refVarName != null) { - args += delimiter + refVarName; + if (!args.contains(refVarName)) { + args.add(refVarName); + } } else { - args += delimiter + varEnt.getValue().getName(); + if (!args.contains(varEnt.getValue().getName())) { + args.add(varEnt.getValue().getName()); + } } - delimiter = ", "; } } - inputAccessor.addStatement(resourceAccess + "." + input.getName() + "(" + args + ");"); + String argsStr = ""; + String delimiter = ""; + for (String arg: args) { + argsStr += delimiter + arg; + delimiter = ", "; + } + inputAccessor.addStatement(resourceAccess + "." + input.getName() + "(" + argsStr + ");"); } } }