diff --git a/AlgebraicDataflowArchitectureModel/models/Clock.dtram b/AlgebraicDataflowArchitectureModel/models/Clock.dtram index 380ceca..f619eaf 100644 --- a/AlgebraicDataflowArchitectureModel/models/Clock.dtram +++ b/AlgebraicDataflowArchitectureModel/models/Clock.dtram @@ -1,18 +1,18 @@ model { channel CIO1 { - out min(m, tick) == mod(m + 1, 60) + out min(m: Int, tick) == mod(m + 1, 60) } channel HourUpdate { - in hour(h, update(h')) == h' - out hour_hand(h_ang, update(h')) == h' / 6 * PI + in hour(h: Int, update(h2)) == h2 + out hour_hand(h_ang: Float, update(h2)) == h2 / 6 * PI } channel MinUpdate { - in min(m, update(m')) == m' - out min_hand(m_ang, update(m')) == m' / 30 * PI + in min(m, update(m2)) == m2 + out min_hand(m_ang: Float, update(m2)) == m2 / 30 * PI } channel Clock { - in min(m, update(m')) == m' - out hour(h, update(m')) == if(eq(m', 0), mod(h + 1, 24), h) + in min(m, update(m2)) == m2 + out hour(h, update(m2)) == if(eq(m2, 0), mod(h + 1, 24), h) } } geometry { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index 55f1ddc..193647a 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -27,7 +27,6 @@ import models.algebra.UnificationFailed; import models.algebra.ValueUndefined; import models.algebra.Variable; -import models.controlFlowModel.CallEdge; import models.controlFlowModel.ControlFlowGraph; import models.controlFlowModel.EntryPointObjectNode; import models.controlFlowModel.ObjectNode; @@ -549,7 +548,11 @@ MethodDeclaration calleeMethod = declareAndFillUpdateAndInputMethods(dstNode, outEdge, node, dataFlowInform, componentMap, langSpec); if (input == null) { // Declare an input method. - input = langSpec.newMethodDeclaration(calleeMethod.getName(), false, null, new ArrayList<>(calleeMethod.getParameters())); + if (calleeMethod.getParameters() != null) { + input = langSpec.newMethodDeclaration(calleeMethod.getName(), false, null, new ArrayList<>(calleeMethod.getParameters())); + } else { + input = langSpec.newMethodDeclaration(calleeMethod.getName(), null); + } } // Add a statement to call the destination method. addInvocationInMediatorUpdate(input, calleeMethod, ((ObjectNode) dstNode).getName(), dataFlowInform, langSpec); @@ -570,7 +573,11 @@ MethodDeclaration calleeMethod = declareAndFillUpdateAndInputMethods(dstNode, outEdge, prevResNode, dataFlowInform, componentMap, langSpec); if (updateOrInput == null && prevResNode instanceof EntryPointObjectNode) { // Declare an input method. - updateOrInput = langSpec.newMethodDeclaration(calleeMethod.getName(), false, null, new ArrayList<>(calleeMethod.getParameters())); + if (calleeMethod.getParameters() != null) { + updateOrInput = langSpec.newMethodDeclaration(calleeMethod.getName(), false, null, new ArrayList<>(calleeMethod.getParameters())); + } else { + updateOrInput = langSpec.newMethodDeclaration(calleeMethod.getName(), null); + } component.addMethod(updateOrInput); } // Add a statement to call the destination method. @@ -725,9 +732,11 @@ private static void addInvocationInResourceUpdate(Node node, MethodDeclaration resourceUpdateMethod, MethodDeclaration calleeMethod, String dstNodeName, ILanguageSpecific langSpec) { List params = new ArrayList<>(); params.add(langSpec.getFieldAccessor(fieldOfResourceState)); - for (VariableDeclaration v: calleeMethod.getParameters()) { - if (!((ObjectNode) node).getName().equals(v.getName())) { - params.add(v.getName()); + if (calleeMethod.getParameters() != null) { + for (VariableDeclaration v: calleeMethod.getParameters()) { + if (!((ObjectNode) node).getName().equals(v.getName())) { + params.add(v.getName()); + } } } // for (ChannelMember rc: re.getChannelGenerator().getReferenceChannelMembers()) { @@ -760,8 +769,10 @@ private static void addInvocationInMediatorUpdate(MethodDeclaration resourceUpdateMethod, MethodDeclaration calleeMethod, String dstNodeName, Map>> dataFlowInform, ILanguageSpecific langSpec) { Map> referredResources = new HashMap<>(); List params = new ArrayList<>(); - for (VariableDeclaration v: calleeMethod.getParameters()) { - params.add(v.getName()); + if (calleeMethod.getParameters() != null) { + for (VariableDeclaration v: calleeMethod.getParameters()) { + params.add(v.getName()); + } } resourceUpdateMethod.addStatement(langSpec.getMethodInvocation(langSpec.getFieldAccessor(dstNodeName), calleeMethod.getName(), @@ -1127,11 +1138,13 @@ mainComponent.addMethod(mainInput); } else { // Add type to a parameter without type. - for (VariableDeclaration param: mainInput.getParameters()) { - if (param.getType() == null) { - for (VariableDeclaration p: params) { - if (param.getName().equals(p.getName()) && p.getType() != null) { - param.setType(p.getType()); + if (mainInput.getParameters() != null) { + for (VariableDeclaration param: mainInput.getParameters()) { + if (param.getType() == null) { + for (VariableDeclaration p: params) { + if (param.getName().equals(p.getName()) && p.getType() != null) { + param.setType(p.getType()); + } } } }