diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index 36ce07f..881170d 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -347,7 +347,7 @@ } composer.setType(stateGetter.getReturnType()); String[] sideEffects = new String[] {null}; - String returnValue = composer.toImplementation(sideEffects); + String returnValue = composer.toImplementation(sideEffects, new JavaImplementationVisitor()); if (sideEffects[0] != null) { stateGetter.addStatement(sideEffects[0] + langSpec.getReturnStatement(returnValue)); } else { @@ -387,7 +387,7 @@ } if (descendantGetter != null && (descendantGetter.getBody() == null || descendantGetter.getBody().getStatements().size() == 0)) { String[] sideEffects = new String[] {null}; - String returnValue = selector.toImplementation(sideEffects); + String returnValue = selector.toImplementation(sideEffects, new JavaImplementationVisitor()); if (sideEffects[0] != null) descendantGetter.addStatement(sideEffects[0]); descendantGetter.addStatement(langSpec.getReturnStatement(returnValue)); } @@ -419,7 +419,7 @@ } Block block = new Block(); Expression getState = getPullAccessor(platformSpec).getDirectStateAccessorFor(accessResPath, null); - block.addStatement(langSpec.getReturnStatement(getState.toImplementation(new String[] {null}))); + block.addStatement(langSpec.getReturnStatement(getState.toImplementation(new String[] {null}, new JavaImplementationVisitor()))); // if (stateGetter.getParameters() == null || stateGetter.getParameters().size() == 0) { // block.addStatement(langSpec.getReturnStatement(langSpec.getMethodInvocation(accessRes.getResourceName(), stateGetter.getName()))); // } else { @@ -821,7 +821,7 @@ String initializer = null; if (initialValue != null) { String sideEffects[] = new String[]{""}; - initializer = initialValue.toImplementation(sideEffects); + initializer = initialValue.toImplementation(sideEffects, new JavaImplementationVisitor()); if (sideEffects[0] == null || sideEffects[0].length() == 0) { field.setInitializer(initializer); } else { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java index 14afaa7..49bd01f 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java @@ -361,7 +361,7 @@ ((Variable) param).setType(var.getType()); } } - params.add(param.toImplementation(null)); + params.add(param.toImplementation(null, new JavaImplementationVisitor())); } else { params.add(var.getName()); } @@ -405,7 +405,7 @@ ((Variable) exp).setType(fieldType); } String[] sideEffects = new String[] {""}; - String newState = exp.toImplementation(sideEffects); + String newState = exp.toImplementation(sideEffects, new JavaImplementationVisitor()); String updateStatement; if (exp instanceof Term && ((Term) exp).getSymbol().isImplWithSideEffect()) { updateStatement = sideEffects[0]; @@ -1028,7 +1028,7 @@ List pathParams = new ArrayList<>(); for (Expression pathExp: srcResPath.getPathParams()) { String[] sideEffects = new String[] {""}; - pathParams.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParams.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } generatePullDataTransfer(stateGetter, null, srcResourceName, srcResPath.getResourceHierarchy().toResourcePath(pathParams), @@ -1063,7 +1063,7 @@ List pathParams = new ArrayList<>(); for (Expression pathExp: refResPath.getPathParams()) { String[] sideEffects = new String[] {""}; - pathParams.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParams.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } generatePullDataTransfer(stateGetter, null, refResourceName, refResPath.getResourceHierarchy().toResourcePath(pathParams), @@ -1097,7 +1097,7 @@ List pathParams = new ArrayList<>(); for (Expression pathExp: srcResPath.getPathParams()) { String[] sideEffects = new String[] {""}; - pathParams.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParams.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } // generate a pull data transfer from a depending in/ref resource. Type srcResourceType = srcResPath.getResourceStateType(); @@ -1130,7 +1130,7 @@ Type srcResType2 = src2.getResourceStateType(); String srcResName2 = langSpec.toVariableName(getComponentName(src2.getResourceHierarchy(), langSpec)); if (platformSpec.isMonolithic()) { - String srcGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}); + String srcGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}, new JavaImplementationVisitor()); forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(srcResType2, srcResName2) + langSpec.getAssignment() + srcGetter + langSpec.getStatementDelimiter()); } else { @@ -1147,7 +1147,7 @@ Type srcResType2 = src2.getResourceStateType(); String srcResName2 = langSpec.toVariableName(getComponentName(src2.getResourceHierarchy(), langSpec)); if (platformSpec.isMonolithic()) { - String dependingGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}); + String dependingGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}, new JavaImplementationVisitor()); forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(srcResType2, srcResName2) + langSpec.getAssignment() + dependingGetter + langSpec.getStatementDelimiter()); } else { @@ -1182,7 +1182,7 @@ pos.addHeadOrder(0); subTerm.replaceSubTerm(pos, var); String[] sideEffects = new String[] {""}; - String curState = messageTermSub.toImplementation(sideEffects); + String curState = messageTermSub.toImplementation(sideEffects, new JavaImplementationVisitor()); forLoopBlock.addStatement(sideEffects[0].replaceAll("\n", "")); // Cancel the side effects in the return value. pos = subTermEnt.getKey(); @@ -1233,9 +1233,9 @@ Expression parentGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, dstResPath); Term valueGetter = new Term(new Symbol(getterOfResourceState, 1, Symbol.Type.METHOD)); valueGetter.addChild(parentGetter); - parent = valueGetter.toImplementation(new String[] {""}); + parent = valueGetter.toImplementation(new String[] {""}, new JavaImplementationVisitor()); } else { - parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, dstResPath).toImplementation(new String[] {""}); + parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, dstResPath).toImplementation(new String[] {""}, new JavaImplementationVisitor()); } } else { // for REST API @@ -1281,7 +1281,7 @@ // generate a return statement. String[] sideEffects = new String[] {""}; - String curState = ch.deriveUpdateExpressionOf(out, messageTerm, getPullAccessor(platformSpec)).toImplementation(sideEffects); + String curState = ch.deriveUpdateExpressionOf(out, messageTerm, getPullAccessor(platformSpec)).toImplementation(sideEffects, new JavaImplementationVisitor()); stateGetter.addStatement(sideEffects[0] + langSpec.getReturnStatement(curState)); } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { @@ -1530,7 +1530,7 @@ } // Add statements to the update method. String[] sideEffects = new String[] {""}; - String newState = updateExp.toImplementation(sideEffects); + String newState = updateExp.toImplementation(sideEffects, new JavaImplementationVisitor()); int numOfOutResourcesWithTheSameHierarchy = 0; for (ResourcePath outResPath: ch.getOutputResources()) { if (outResPath.getResourceHierarchy().equals(outRes)) { @@ -1562,7 +1562,7 @@ selector.addChild(new Variable(update.getParameters().get(update.getParameters().size() - 2).getName())); selector.addChild(new Constant(newState)); String[] sideEffects2 = new String[] {""}; - String newList = selector.toImplementation(sideEffects2); + String newList = selector.toImplementation(sideEffects2, new JavaImplementationVisitor()); updateStatement += sideEffects2[0]; } else if (DataConstraintModel.typeMap.isAncestorOf(resourceNode.getParent().getResourceStateType())) { Term selector = new Term(DataConstraintModel.insert); @@ -1570,7 +1570,7 @@ selector.addChild(new Variable(update.getParameters().get(update.getParameters().size() - 2).getName())); selector.addChild(new Constant(newState)); String[] sideEffects2 = new String[] {""}; - String newMap = selector.toImplementation(sideEffects2); + String newMap = selector.toImplementation(sideEffects2, new JavaImplementationVisitor()); updateStatement += sideEffects2[0]; } else if (!(updateExp instanceof Term && ((Term) updateExp).getSymbol().isImplWithSideEffect())) { String resourceName = langSpec.toVariableName(getComponentName(outRes, langSpec)); @@ -1774,7 +1774,7 @@ } } String[] sideEffects = new String[] {""}; - String outsideAccessor = outsideExp.toImplementation(sideEffects); + String outsideAccessor = outsideExp.toImplementation(sideEffects, new JavaImplementationVisitor()); String updateReference = langSpec.getFieldAccessor(outsideResName) + langSpec.getAssignment() + outsideAccessor + langSpec.getStatementDelimiter(); update.addStatement(updateReference); // Update the reference field. // Update constructor. @@ -1895,9 +1895,9 @@ Expression getter = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)); Term valueGetter = new Term(new Symbol(getterOfResourceState, 1, Symbol.Type.METHOD)); valueGetter.addChild(getter); - parent = valueGetter.toImplementation(new String[] {""}); + parent = valueGetter.toImplementation(new String[] {""}, new JavaImplementationVisitor()); } else { - parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)).toImplementation(new String[] {""}); + parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)).toImplementation(new String[] {""}, new JavaImplementationVisitor()); } } else { // for REST API @@ -1962,7 +1962,7 @@ && (rc.isOutside() || (ref.getCommonPrefix(srcRes) == null && platformSpec.isDifferentTreesAsDifferentServices()))) { List pathParams = new ArrayList<>(); for (Expression pathExp: ref.getPathParams()) { - pathParams.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParams.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } generatePullDataTransfer(update, forLoopBlock, refVarName, ref.getResourceHierarchy().toResourcePath(pathParams), refResourceType, false, platformSpec, langSpec); if (component != null && !((RestApiSpecific) platformSpec).hasHttpClientFieldDeclaration(component)) { @@ -1974,7 +1974,7 @@ } } else { Expression refGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(ref, srcRes); - String refExp = refGetter.toImplementation(sideEffects); + String refExp = refGetter.toImplementation(sideEffects, new JavaImplementationVisitor()); String refTypeName = ref.getResourceStateType().getInterfaceTypeName(); if (sideEffects[0] != null && !sideEffects[0].isEmpty()) forLoopBlock.addStatement(sideEffects[0]); forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(ref.getResourceStateType(), refVarName, new PlainExpression(refExp))); @@ -2034,7 +2034,7 @@ outsideExp = ((Term) outsideExp).getChild(0); } String[] sideEffects = new String[] {""}; - String outsideAccessor = outsideExp.toImplementation(sideEffects); + String outsideAccessor = outsideExp.toImplementation(sideEffects, new JavaImplementationVisitor()); String updateReference = langSpec.getFieldAccessor(outsideResName) + langSpec.getAssignment() + outsideAccessor + langSpec.getStatementDelimiter(); update.addStatement(updateReference); // Update the reference field. // Update constructor. @@ -2356,7 +2356,7 @@ String refVarName = ref.getLeafResourceName(); Expression refGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(ref, null); String[] sideEffects = new String[] {""}; - String refExp = refGetter.toImplementation(sideEffects); + String refExp = refGetter.toImplementation(sideEffects, new JavaImplementationVisitor()); String refTypeName = ref.getResourceStateType().getInterfaceTypeName(); mainInputAccessor.addFirstStatement(sideEffects[0] + langSpec.newVariableDeclaration(ref.getResourceStateType(), refVarName) + langSpec.getAssignment() + refExp + langSpec.getStatementDelimiter()); @@ -2402,7 +2402,7 @@ } } if (resExp != null) { - String resourceAccess = resExp.toImplementation(new String[] {""}); + String resourceAccess = resExp.toImplementation(new String[] {""}, new JavaImplementationVisitor()); mainInputAccessor.addStatement(langSpec.getMethodInvocation(resourceAccess, input.getName(), args) + langSpec.getStatementDelimiter()); } else { mainInputAccessor.addStatement(langSpec.getMethodInvocation(input.getName(), args) + langSpec.getStatementDelimiter()); @@ -2431,7 +2431,7 @@ // Add statements to the input method. if (updateExp != null) { String[] sideEffects = new String[] {""}; - String newState = updateExp.toImplementation(sideEffects); + String newState = updateExp.toImplementation(sideEffects, new JavaImplementationVisitor()); ResourceHierarchy resource = resourceNode.getResourceHierarchy(); if (generatesComponent(resource)) { String updateStatement; @@ -2460,7 +2460,7 @@ selector.addChild(new Variable(input.getParameters().get(input.getParameters().size() - 2).getName())); selector.addChild(new Constant(newState)); String[] sideEffects2 = new String[] {""}; - String newList = selector.toImplementation(sideEffects2); + String newList = selector.toImplementation(sideEffects2, new JavaImplementationVisitor()); updateStatement += sideEffects2[0]; } else if (DataConstraintModel.typeMap.isAncestorOf(resourceNode.getParent().getResourceStateType())) { Term selector = new Term(DataConstraintModel.insert); @@ -2468,7 +2468,7 @@ selector.addChild(new Variable(input.getParameters().get(input.getParameters().size() - 2).getName())); selector.addChild(new Constant(newState)); String[] sideEffects2 = new String[] {""}; - String newMap = selector.toImplementation(sideEffects2); + String newMap = selector.toImplementation(sideEffects2, new JavaImplementationVisitor()); updateStatement += sideEffects2[0]; } else if (!(updateExp instanceof Term && ((Term) updateExp).getSymbol().isImplWithSideEffect())) { String resourceName = langSpec.toVariableName(getComponentName(resource, langSpec)); @@ -2496,7 +2496,7 @@ && (rc.isOutside() || (ref.getCommonPrefix(dstRes) == null && platformSpec.isDifferentTreesAsDifferentServices()))) { List pathParams = new ArrayList<>(); for (Expression pathExp: ref.getPathParams()) { - pathParams.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParams.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } generatePullDataTransfer(input, null, refResourceName, ref.getResourceHierarchy().toResourcePath(pathParams), refResourceType, true, platformSpec, langSpec); if (component != null && !((RestApiSpecific) platformSpec).hasHttpClientFieldDeclaration(component)) { @@ -2508,7 +2508,7 @@ } } else { Expression refGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(ref, dstRes); - String refExp = refGetter.toImplementation(sideEffects); + String refExp = refGetter.toImplementation(sideEffects, new JavaImplementationVisitor()); String refTypeName = refResourceType.getInterfaceTypeName(); input.addFirstStatement(sideEffects[0] + langSpec.newVariableDeclaration(refResourceType, refResourceName) + langSpec.getAssignment() + refExp + langSpec.getStatementDelimiter()); @@ -2548,7 +2548,7 @@ } } if (resExp != null) { - String resourceAccess = resExp.toImplementation(new String[] {""}); + String resourceAccess = resExp.toImplementation(new String[] {""}, new JavaImplementationVisitor()); rootInputAccessor.addStatement(langSpec.getMethodInvocation(resourceAccess, input.getName(), args) + langSpec.getStatementDelimiter()); } else { rootInputAccessor.addStatement(langSpec.getMethodInvocation(input.getName(), args) + langSpec.getStatementDelimiter()); @@ -2682,9 +2682,9 @@ Expression getter = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)); Term valueGetter = new Term(new Symbol(getterOfResourceState, 1, Symbol.Type.METHOD)); valueGetter.addChild(getter); - parent = valueGetter.toImplementation(new String[] {""}); + parent = valueGetter.toImplementation(new String[] {""}, new JavaImplementationVisitor()); } else { - parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)).toImplementation(new String[] {""}); + parent = getPullAccessor(platformSpec).getDirectStateAccessorFor(insideResPath, resourceNode.getOutSideResource(directDstCh)).toImplementation(new String[] {""}, new JavaImplementationVisitor()); } } else { // for REST API @@ -2745,7 +2745,7 @@ } Expression refGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(ref, srcRes); String[] sideEffects = new String[] {""}; - String refExp = refGetter.toImplementation(sideEffects); + String refExp = refGetter.toImplementation(sideEffects, new JavaImplementationVisitor()); String refTypeName = ref.getResourceStateType().getInterfaceTypeName(); if (sideEffects[0] != null && !sideEffects[0].isEmpty()) forLoopBlock.addStatement(sideEffects[0]); forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(ref.getResourceStateType(), refVarName, new PlainExpression(refExp))); @@ -2802,7 +2802,7 @@ outsideExp = ((Term) outsideExp).getChild(0); } String[] sideEffects = new String[] {""}; - String outsideAccessor = outsideExp.toImplementation(sideEffects); + String outsideAccessor = outsideExp.toImplementation(sideEffects, new JavaImplementationVisitor()); input.addStatement(langSpec.getFieldAccessor(outsideResName) + langSpec.getAssignment() + outsideAccessor + langSpec.getStatementDelimiter()); // change the reference field. // Update constructor. String initializingStatement = langSpec.getFieldAccessor(outsideResName) + langSpec.getAssignment() + outsideAccessor + langSpec.getStatementDelimiter(); @@ -2871,7 +2871,7 @@ } } String[] sideEffects = new String[] {""}; - String outsideAccessor = outsideExp.toImplementation(sideEffects); + String outsideAccessor = outsideExp.toImplementation(sideEffects, new JavaImplementationVisitor()); callerBlock.addStatement(langSpec.getFieldAccessor(outsideResName) + langSpec.getAssignment() + outsideAccessor + langSpec.getStatementDelimiter()); // change the reference field. } } @@ -2971,7 +2971,7 @@ String[] sideEffects = new String[] {""}; List pathParamsUrl = new ArrayList<>(); for (Expression pathExp: out.getResource().getPathParams()) { - pathParamsUrl.add("\" + " + pathExp.toImplementation(sideEffects) + " + \""); + pathParamsUrl.add("\" + " + pathExp.toImplementation(sideEffects, new JavaImplementationVisitor()) + " + \""); } String srcResName = langSpec.toVariableName(getComponentName(srcNode.getResourceHierarchy(), langSpec)); if (inDegree <= 1) { @@ -3146,7 +3146,7 @@ if (message instanceof Term) { String updateMethodName = ((Term) message).getSymbol().getName(); for (Expression messageArg: ((Term) message).getChildren()) { - args.add(messageArg.toImplementation(new String[] {null})); + args.add(messageArg.toImplementation(new String[] {null}, new JavaImplementationVisitor())); } callerMethod.addStatement(langSpec.getMethodInvocation(langSpec.getFieldAccessor(receiverName), updateMethodName, args) + langSpec.getStatementDelimiter()); @@ -3216,7 +3216,7 @@ resPath.replacePathParam(i, pathParam, null); } Expression getState = getPullAccessor(platformSpec).getDirectStateAccessorFor(resPath, resPath.getRoot()); - getterAccessor.getBody().addStatement(langSpec.getReturnStatement(getState.toImplementation(new String[] {null}))); + getterAccessor.getBody().addStatement(langSpec.getReturnStatement(getState.toImplementation(new String[] {null}, new JavaImplementationVisitor()))); if (!platformSpec.isMonolithic()) { ((RestApiSpecific) platformSpec).addGetAnnotations(getterAccessor); if (resourcePath.length() > 0) { @@ -3302,7 +3302,7 @@ args.add(var.getName()); } if (resExp != null) { - String resourceAccess = resExp.toImplementation(new String[] {""}); + String resourceAccess = resExp.toImplementation(new String[] {""}, new JavaImplementationVisitor()); updateAccessor.addStatement(langSpec.getMethodInvocation(resourceAccess, updateMethodName, args) + langSpec.getStatementDelimiter()); } else { updateAccessor.addStatement(langSpec.getMethodInvocation(updateMethodName, args) + langSpec.getStatementDelimiter()); diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java index 0387689..8658930 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java @@ -2,6 +2,7 @@ import models.algebra.*; import models.dataConstraintModel.DataConstraintModel; +import models.dataConstraintModel.IStructuredExpressionVisitor; import models.dataConstraintModel.JsonAccessor; import models.dataConstraintModel.JsonTerm; import parser.Parser; @@ -15,7 +16,7 @@ * * @author s-yamagiwa */ -public class JavaImplementationVisitor implements IExpressionVisitor { +public class JavaImplementationVisitor implements IStructuredExpressionVisitor { private static int jsonCount = 0; @Override diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java index 81b3d8e..5687809 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java @@ -270,7 +270,7 @@ @Override public IfStatement getIfStatement(Term condition, Statement block) { IfStatement ifStatement = new IfStatement(); - String conditionSource = condition.toImplementation(new String[]{""}); + String conditionSource = condition.toImplementation(new String[]{""}, new JavaImplementationVisitor()); ifStatement.setExpression(new code.ast.Variable(conditionSource)); ifStatement.setThenStatement(block); return ifStatement; @@ -418,7 +418,7 @@ last.addChild(t); t = last; } - return t.toImplementation(new String[]{""}); + return t.toImplementation(new String[]{""}, new JavaImplementationVisitor()); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java index 836600c..92678b3 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java @@ -1,7 +1,5 @@ package models.algebra; -import generators.JavaImplementationVisitor; - import java.util.ArrayList; public class Constant extends Term { @@ -43,8 +41,8 @@ return symbol.getName(); } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java index 910518e..8b83b5a 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java @@ -40,7 +40,7 @@ * @param sideEffects an array with an optional implementation that should be written before the evaluation of this expression * @return the implementation to represent the value of this expression */ - public String toImplementation(String[] sideEffects) { + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { return toString(); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java index 3fcc269..a977973 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java @@ -1,7 +1,5 @@ package models.algebra; -import generators.JavaImplementationVisitor; - /** * A field in the implementation (regarded as a constant in the algebraic system) * @@ -41,8 +39,8 @@ return new Field(symbol); } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java index 4c30c09..9d42ec2 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java @@ -1,8 +1,5 @@ package models.algebra; -import models.dataConstraintModel.JsonAccessor; -import models.dataConstraintModel.JsonTerm; - public interface IExpressionVisitor { T visit(Term term, String[] sideEffects); @@ -11,8 +8,4 @@ T visit(Constant constant, String[] sideEffects); T visit(Variable variable, String[] sideEffects); - - T visit(JsonTerm jsonTerm, String[] sideEffects); - - T visit(JsonAccessor jsonAccessor, String[] sideEffects); } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java index e753b2e..9e89d92 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -1,7 +1,5 @@ package models.algebra; -import generators.JavaImplementationVisitor; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -311,8 +309,8 @@ } } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java index dbe441b..6809b8c 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java @@ -1,7 +1,5 @@ package models.algebra; -import generators.JavaImplementationVisitor; - import java.util.HashMap; public class Variable extends Expression { @@ -83,8 +81,8 @@ return name + ":" + type.getTypeName(); } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/IStructuredExpressionVisitor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/IStructuredExpressionVisitor.java new file mode 100644 index 0000000..f7a6792 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/IStructuredExpressionVisitor.java @@ -0,0 +1,9 @@ +package models.dataConstraintModel; + +import models.algebra.IExpressionVisitor; + +public interface IStructuredExpressionVisitor extends IExpressionVisitor { + T visit(JsonTerm jsonTerm, String[] sideEffects); + + T visit(JsonAccessor jsonAccessor, String[] sideEffects); +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java index 2ff827b..999d3ac 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java @@ -1,7 +1,5 @@ package models.dataConstraintModel; -import models.algebra.IExpressionVisitor; -import generators.JavaImplementationVisitor; import models.algebra.*; import java.util.HashMap; @@ -205,8 +203,8 @@ return super.toString(); } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java index 9489f06..e66cd24 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java @@ -1,7 +1,5 @@ package models.dataConstraintModel; -import models.algebra.IExpressionVisitor; -import generators.JavaImplementationVisitor; import models.algebra.*; import parser.Parser; @@ -91,8 +89,8 @@ return jsonStr + "}"; } - public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects).toString(); + public String toImplementation(String[] sideEffects, IExpressionVisitor expressionVisitor) { + return accept(expressionVisitor, sideEffects).toString(); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java b/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java index bc1db89..c1b2c8f 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java @@ -1,5 +1,6 @@ package tests; +import generators.JavaImplementationVisitor; import models.algebra.Constant; import models.algebra.Expression; import models.algebra.Field; @@ -162,7 +163,7 @@ try { String[] sideEffects = new String[] {""}; System.out.println("-----"); - System.out.println(c1.deriveUpdateExpressionOf(c1_loyalty).toImplementation(sideEffects)); + System.out.println(c1.deriveUpdateExpressionOf(c1_loyalty).toImplementation(sideEffects, new JavaImplementationVisitor())); System.out.println("-- PUSH --"); Expression loyaltyPushUpdate = c1.deriveUpdateExpressionOf(c1_loyalty, pushAccessor).getKey(); @@ -173,13 +174,13 @@ break; } } - System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects) + ") {"); - System.out.println("\t" + fPoints + " = " + loyaltyPushUpdate.toImplementation(sideEffects) + ";"); + System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects, new JavaImplementationVisitor()) + ") {"); + System.out.println("\t" + fPoints + " = " + loyaltyPushUpdate.toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); System.out.println("-- PULL --"); System.out.println(points.getResourceStateType().getImplementationTypeName() + " " + pointsGetter.toImplementation() + "() {"); - System.out.println("\t return " + c1.deriveUpdateExpressionOf(c1_loyalty, pullAccessor).getKey().toImplementation(sideEffects) + ";"); + System.out.println("\t return " + c1.deriveUpdateExpressionOf(c1_loyalty, pullAccessor).getKey().toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { @@ -225,7 +226,7 @@ try { String[] sideEffects = new String[] {""}; System.out.println("-----"); - System.out.println(c2.deriveUpdateExpressionOf(c2_history).toImplementation(sideEffects)); + System.out.println(c2.deriveUpdateExpressionOf(c2_history).toImplementation(sideEffects, new JavaImplementationVisitor())); System.out.println("-- PUSH --"); Expression historyPushUpdate = c2.deriveUpdateExpressionOf(c2_history, pushAccessor).getKey(); @@ -236,13 +237,13 @@ break; } } - System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects) + ") {"); - System.out.println("\t" + fHistory + " = " + historyPushUpdate.toImplementation(sideEffects) + ";"); + System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects, new JavaImplementationVisitor()) + ") {"); + System.out.println("\t" + fHistory + " = " + historyPushUpdate.toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); System.out.println("-- PULL --"); System.out.println(history.getResourceStateType().getImplementationTypeName() + " " + historyGetter.toImplementation() + "() {"); - System.out.println("\t return " + c2.deriveUpdateExpressionOf(c2_history, pullAccessor).getKey().toImplementation(sideEffects) + ";"); + System.out.println("\t return " + c2.deriveUpdateExpressionOf(c2_history, pullAccessor).getKey().toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { @@ -288,7 +289,6 @@ try { String[] sideEffects = new String[] {""}; System.out.println("-----"); - System.out.println(c3.deriveUpdateExpressionOf(c3_total).toImplementation(sideEffects)); System.out.println("-- PUSH --"); Expression totalPushUpdate = c3.deriveUpdateExpressionOf(c3_total, pushAccessor).getKey(); @@ -299,13 +299,13 @@ break; } } - System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects) + ") {"); - System.out.println("\t" + fTotal + " = " + totalPushUpdate.toImplementation(sideEffects) + ";"); + System.out.println("void update(" + param.getType().getImplementationTypeName() + " " + param.toImplementation(sideEffects, new JavaImplementationVisitor()) + ") {"); + System.out.println("\t" + fTotal + " = " + totalPushUpdate.toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); System.out.println("-- PULL --"); System.out.println(total.getResourceStateType().getImplementationTypeName() + " " + totalGetter.toImplementation() + "() {"); - System.out.println("\t return " + c3.deriveUpdateExpressionOf(c3_total, pullAccessor).getKey().toImplementation(sideEffects) + ";"); + System.out.println("\t return " + c3.deriveUpdateExpressionOf(c3_total, pullAccessor).getKey().toImplementation(sideEffects, new JavaImplementationVisitor()) + ";"); System.out.println("}"); } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java index 8c5eae4..befe89a 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java @@ -5,6 +5,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; +import generators.JavaImplementationVisitor; import models.Edge; import models.algebra.InvalidMessage; import models.algebra.ParameterizedIdentifierIsFutureWork; @@ -45,7 +46,7 @@ for (Channel c: model.getChannels()) { for (ChannelMember out: ((DataTransferChannel) c).getOutputChannelMembers()) { String[] sideEffects = new String[] {""}; - System.out.println("next" + out.getResource().getLeafResourceName() + " = " + ((DataTransferChannel) c).deriveUpdateExpressionOf(out).toImplementation(sideEffects)); + System.out.println("next" + out.getResource().getLeafResourceName() + " = " + ((DataTransferChannel) c).deriveUpdateExpressionOf(out).toImplementation(sideEffects, new JavaImplementationVisitor())); } }