diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java index a7a07d9..33fb1c0 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; public class Block extends Statement { - private List statements = new ArrayList(); + private List statements = new ArrayList<>(); public List getStatements2() { return statements; @@ -30,6 +30,25 @@ public void addStatements(List statements) { this.statements.addAll(statements); } + + public boolean contains(List statements) { + if (statements.size() == 0) return true; + for (int i = 0; i < this.statements.size(); i++) { + Statement st = this.statements.get(i); + if (st.equals(statements.get(0))) { + if (statements.size() == 1) return true; + int j = 1; + for (int k = i + 1; k < this.statements.size(); k++) { + Statement st2 = this.statements.get(k); + if (st2.equals(statements.get(j))) { + j++; + if (j == statements.size()) return true; + } + } + } + } + return false; + } //==================================================== //TODO: CodeGenerator修正後削除 diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/PlainExpression.java b/AlgebraicDataflowArchitectureModel/src/code/ast/PlainExpression.java new file mode 100644 index 0000000..d00c3fa --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/PlainExpression.java @@ -0,0 +1,18 @@ +package code.ast; + +//==================================================== +//TODO: CodeGenerator修正後削除 +//==================================================== + +public class PlainExpression extends Expression { + private String expression; + + public PlainExpression(String expression) { + this.expression = expression; + } + + @Override + public String toString() { + return expression; + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index e38225a..36ce07f 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -671,7 +671,7 @@ String varName = new String(fromResourceName); Type respType = fromResourceType; String respImplTypeName = fromResourceType.getImplementationTypeName(); - String responseConverter = ""; + List responseConverter = new ArrayList<>(); if (DataConstraintModel.typeList.isAncestorOf(fromResourceType) && fromResourceType != DataConstraintModel.typeList) { if (fromResourceType instanceof ListType) { Type compType = ((ListType) fromResourceType).getElementType(); @@ -679,12 +679,12 @@ varName += "_list"; Type mapType = convertFromEntryToMapType(compType, langSpec); respType = langSpec.newListType(mapType); - responseConverter += langSpec.newVariableDeclaration(fromResourceType, fromResourceName) + langSpec.getAssignment() + langSpec.getConstructorInvocation(fromResourceType.getImplementationTypeName(), null) + langSpec.getStatementDelimiter() + "\n"; + responseConverter.add(langSpec.newVariableDeclarationStatement(fromResourceType, fromResourceName, new PlainExpression(langSpec.getConstructorInvocation(fromResourceType.getImplementationTypeName(), null)))); EnhancedForStatement forStatement = langSpec.getForStatementForCollection(langSpec.newVariableDeclaration(mapType, "i"), varName); Block forBlock = new Block(); forBlock.addStatement(langSpec.getMethodInvocation(fromResourceName, DataConstraintModel.append.getImplName(), List.of(getCodeForConversionFromMapToTuple(compType, "i", langSpec))) + langSpec.getStatementDelimiter()); forStatement.setBody(forBlock); - responseConverter += forStatement; + responseConverter.add(forStatement); restApiSpec.addJsonException(method); } else if (compType != null && DataConstraintModel.typeMap.isAncestorOf(compType)) { // To do. @@ -693,29 +693,29 @@ } else if (DataConstraintModel.typeTuple.isAncestorOf(fromResourceType)) { varName += "_json"; respType = convertFromEntryToMapType(fromResourceType, langSpec); - responseConverter += langSpec.newVariableDeclaration(fromResourceType, fromResourceName) + langSpec.getAssignment() + getCodeForConversionFromMapToTuple(fromResourceType, varName, langSpec) + langSpec.getStatementDelimiter(); + responseConverter.add(langSpec.newVariableDeclarationStatement(fromResourceType, fromResourceName, new PlainExpression(getCodeForConversionFromMapToTuple(fromResourceType, varName, langSpec)))); respImplTypeName = "HashMap"; } else if (DataConstraintModel.typePair.isAncestorOf(fromResourceType)) { varName += "_json"; respType = convertFromEntryToMapType(fromResourceType, langSpec); - responseConverter += langSpec.newVariableDeclaration(fromResourceType, fromResourceName) + langSpec.getAssignment() + getCodeForConversionFromMapToPair(fromResourceType, varName, langSpec) + langSpec.getStatementDelimiter(); + responseConverter.add(langSpec.newVariableDeclarationStatement(fromResourceType, fromResourceName, new PlainExpression(getCodeForConversionFromMapToPair(fromResourceType, varName, langSpec)))); respImplTypeName = "HashMap"; } else if (DataConstraintModel.typeMap.isAncestorOf(fromResourceType)) { varName += "_json"; respType = convertFromEntryToMapType(fromResourceType, langSpec); - responseConverter += langSpec.newVariableDeclaration(fromResourceType, fromResourceName) + langSpec.getAssignment() + langSpec.getConstructorInvocation(fromResourceType.getImplementationTypeName(), null) + langSpec.getStatementDelimiter() + "\n"; - responseConverter += getCodeForConversionFromMapToMap(fromResourceType, varName, fromResourceName, langSpec); + responseConverter.add(langSpec.newVariableDeclarationStatement(fromResourceType, fromResourceName, new PlainExpression(langSpec.getConstructorInvocation(fromResourceType.getImplementationTypeName(), null)))); + responseConverter.add(new PlainStatement(getCodeForConversionFromMapToMap(fromResourceType, varName, fromResourceName, langSpec))); respImplTypeName = "HashMap"; } if (doesAddFirst) { - if (responseConverter.length() > 0) { - block.addFirstStatement(responseConverter); + if (responseConverter.size() > 0) { + block.addFirstStatements(responseConverter); } - block.addFirstStatement(langSpec.newVariableDeclaration(respType, varName) + langSpec.getAssignment() + restApiSpec.getHttpMethodCallWithResponseStatement(restApiSpec.getBaseURL(), fromResourcePath, getterPrefix, respImplTypeName)); + block.addFirstStatement(langSpec.newVariableDeclarationStatement(respType, varName) + langSpec.getAssignment() + restApiSpec.getHttpMethodCallWithResponseStatement(restApiSpec.getBaseURL(), fromResourcePath, getterPrefix, respImplTypeName)); } else { - block.addStatement(langSpec.newVariableDeclaration(respType, varName) + langSpec.getAssignment() + restApiSpec.getHttpMethodCallWithResponseStatement(restApiSpec.getBaseURL(), fromResourcePath, getterPrefix, respImplTypeName)); - if (responseConverter.length() > 0) { - block.addStatement(responseConverter); + block.addStatement(langSpec.newVariableDeclarationStatement(respType, varName) + langSpec.getAssignment() + restApiSpec.getHttpMethodCallWithResponseStatement(restApiSpec.getBaseURL(), fromResourcePath, getterPrefix, respImplTypeName)); + if (responseConverter.size() > 0) { + block.addStatements(responseConverter); } } } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java index 0224022..14afaa7 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java @@ -1118,6 +1118,7 @@ if (!chItr.hasNext()) { chItr = channelItrStack.pop(); } else { + Block forLoopBlock = stateGetter.getBody(); curChannel = (DataTransferChannel) chItr.next(); // generate pull data transfers. Set chMems = new HashSet<>(curChannel.getInputChannelMembers()); @@ -1130,11 +1131,11 @@ String srcResName2 = langSpec.toVariableName(getComponentName(src2.getResourceHierarchy(), langSpec)); if (platformSpec.isMonolithic()) { String srcGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}); - stateGetter.addStatement(langSpec.newVariableDeclaration(srcResType2, srcResName2) + forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(srcResType2, srcResName2) + langSpec.getAssignment() + srcGetter + langSpec.getStatementDelimiter()); } else { String srcPath2 = src2.toResourcePath().replaceAll(":.*\\}","\\}").replaceAll("\\{", "\"+").replaceAll("\\}", "+\""); - generatePullDataTransfer(stateGetter, null, srcResName2, srcPath2, srcResType2, false, platformSpec, langSpec); + generatePullDataTransfer(stateGetter, forLoopBlock, srcResName2, srcPath2, srcResType2, false, platformSpec, langSpec); bDeclareClientField = true; } } else { @@ -1147,11 +1148,11 @@ String srcResName2 = langSpec.toVariableName(getComponentName(src2.getResourceHierarchy(), langSpec)); if (platformSpec.isMonolithic()) { String dependingGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(src2, resourceNode.getInSideResource(curChannel)).toImplementation(new String[] {""}); - stateGetter.addStatement(langSpec.newVariableDeclaration(srcResType2, srcResName2) + forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(srcResType2, srcResName2) + langSpec.getAssignment() + dependingGetter + langSpec.getStatementDelimiter()); } else { String srcPath2 = src2.toResourcePath().replaceAll(":.*\\}","\\}").replaceAll("\\{", "\"+").replaceAll("\\}", "+\""); - generatePullDataTransfer(stateGetter, null, srcResName2, srcPath2, srcResType2, false, platformSpec, langSpec); + generatePullDataTransfer(stateGetter, forLoopBlock, srcResName2, srcPath2, srcResType2, false, platformSpec, langSpec); bDeclareClientField = true; } } @@ -1182,7 +1183,7 @@ subTerm.replaceSubTerm(pos, var); String[] sideEffects = new String[] {""}; String curState = messageTermSub.toImplementation(sideEffects); - stateGetter.addStatement(sideEffects[0].replaceAll("\n", "")); + forLoopBlock.addStatement(sideEffects[0].replaceAll("\n", "")); // Cancel the side effects in the return value. pos = subTermEnt.getKey(); messageTermSub.replaceSubTerm(pos, var); @@ -1200,7 +1201,6 @@ // enclosed by a for loop (for data collecting pull transfer) Expression selExp = curChannel.getSelectors().get(0).getExpression(); Type selType = null; - Block forLoopBlock = stateGetter.getBody(); if (selExp instanceof Variable) { selType = ((Variable) selExp).getType(); String forVarName = ((Variable) selExp).getName(); @@ -1639,33 +1639,33 @@ Type paramType = jsonParam.getType(); String paramName = jsonParam.getName(); String paramTypeName = paramType.getInterfaceTypeName(); - String paramConverter = ""; + List paramConverter = new ArrayList<>(); if (DataConstraintModel.typeList.isAncestorOf(paramType) && paramType != DataConstraintModel.typeList) { if (paramType instanceof ListType) { Type compType = ((ListType) paramType).getElementType(); if (compType != null && DataConstraintModel.typeTuple.isAncestorOf(compType)) { jsonParam.setType(DataConstraintModel.typeListStr); jsonParam.setName(paramName + "_json"); - paramConverter += langSpec.newVariableDeclaration(paramType, paramName) + langSpec.getAssignment() + langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null) + langSpec.getStatementDelimiter() + "\n"; + paramConverter.add(langSpec.newVariableDeclarationStatement(paramType, paramName, new PlainExpression(langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null)))); EnhancedForStatement forStatement = langSpec.getForStatementForCollection(langSpec.newVariableDeclaration(DataConstraintModel.typeString, "str"), jsonParam.getName()); Block forBlock = new Block(); Type mapType = convertFromEntryToMapType(compType, langSpec); forBlock.addStatement(((RestApiSpecific) platformSpec).getConversionFromJsonString("str", "i", mapType.getInterfaceTypeName()) + langSpec.getStatementDelimiter()); forBlock.addStatement(langSpec.getMethodInvocation(paramName, DataConstraintModel.append.getImplName(), List.of(getCodeForConversionFromMapToTuple(compType, "i", langSpec))) + langSpec.getStatementDelimiter()); forStatement.setBody(forBlock); - paramConverter += forStatement; + paramConverter.add(forStatement); ((RestApiSpecific) platformSpec).addJsonException(update); } else if (compType != null && DataConstraintModel.typePair.isAncestorOf(compType)) { jsonParam.setType(DataConstraintModel.typeListStr); jsonParam.setName(paramName + "_json"); - paramConverter += langSpec.newVariableDeclaration(paramType, paramName) + langSpec.getAssignment() + langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null) + langSpec.getStatementDelimiter() + "\n"; + paramConverter.add(langSpec.newVariableDeclarationStatement(paramType, paramName, new PlainExpression(langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null)))); EnhancedForStatement forStatement = langSpec.getForStatementForCollection(langSpec.newVariableDeclaration(DataConstraintModel.typeString, "str"), jsonParam.getName()); Block forBlock = new Block(); Type mapType = convertFromEntryToMapType(compType, langSpec); forBlock.addStatement(((RestApiSpecific) platformSpec).getConversionFromJsonString("str", "i", mapType.getInterfaceTypeName()) + langSpec.getStatementDelimiter()); forBlock.addStatement(langSpec.getMethodInvocation(paramName, DataConstraintModel.append.getImplName(), List.of(getCodeForConversionFromMapToPair(compType, "i", langSpec))) + langSpec.getStatementDelimiter()); forStatement.setBody(forBlock); - paramConverter += forStatement; + paramConverter.add(forStatement); ((RestApiSpecific) platformSpec).addJsonException(update); } else if (compType != null && DataConstraintModel.typeMap.isAncestorOf(compType)) { jsonParam.setType(DataConstraintModel.typeListStr); @@ -1675,36 +1675,36 @@ } else if (DataConstraintModel.typeTuple.isAncestorOf(paramType)) { jsonParam.setType(DataConstraintModel.typeString); jsonParam.setName(paramName + "_json"); - paramConverter += langSpec.newVariableDeclaration(paramType, paramName) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += langSpec.getOpeningScoreDelimiter() + "\n"; + paramConverter.add(langSpec.newVariableDeclarationStatement(paramType, paramName)); + Block localBlock = new Block(); Type mapType = convertFromEntryToMapType(paramType, langSpec); - paramConverter += "\t" + ((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName()) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += "\t" + paramName + langSpec.getAssignment() + getCodeForConversionFromMapToTuple(paramType, "i", langSpec) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += langSpec.getClosingScoreDelimiter(); + localBlock.addStatement(((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName())); + localBlock.addStatement(langSpec.getAssignmentStatement(paramName, getCodeForConversionFromMapToTuple(paramType, "i", langSpec))); + paramConverter.add(localBlock); ((RestApiSpecific) platformSpec).addJsonException(update); } else if (DataConstraintModel.typePair.isAncestorOf(paramType)) { jsonParam.setType(DataConstraintModel.typeString); jsonParam.setName(paramName + "_json"); - paramConverter += langSpec.newVariableDeclaration(paramType, paramName) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += langSpec.getOpeningScoreDelimiter() + "\n"; + paramConverter.add(langSpec.newVariableDeclarationStatement(paramType, paramName)); + Block localBlock = langSpec.newBlock(); Type mapType = convertFromEntryToMapType(paramType, langSpec); - paramConverter += "\t" + ((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName()) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += "\t" + paramName + langSpec.getAssignment() + getCodeForConversionFromMapToPair(paramType, "i", langSpec) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += langSpec.getClosingScoreDelimiter(); + localBlock.addStatement(((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName())); + localBlock.addStatement(langSpec.getAssignmentStatement(paramName, getCodeForConversionFromMapToPair(paramType, "i", langSpec))); + paramConverter.add(localBlock); ((RestApiSpecific) platformSpec).addJsonException(update); } else if (DataConstraintModel.typeMap.isAncestorOf(paramType)) { jsonParam.setType(DataConstraintModel.typeString); jsonParam.setName(paramName + "_json"); - paramConverter += langSpec.newVariableDeclaration(paramType, paramName) + langSpec.getAssignment() + langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += langSpec.getOpeningScoreDelimiter() + "\n"; + paramConverter.add(langSpec.newVariableDeclarationStatement(paramType, paramName, new PlainExpression(langSpec.getConstructorInvocation(paramType.getImplementationTypeName(), null)))); + Block localBlock = langSpec.newBlock(); Type mapType = convertFromEntryToMapType(paramType, langSpec); - paramConverter += "\t" + ((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName()) + langSpec.getStatementDelimiter() + "\n"; - paramConverter += "\t" + getCodeForConversionFromMapToMap(paramType, "i", paramName, langSpec) + "\n"; - paramConverter += langSpec.getClosingScoreDelimiter(); + localBlock.addStatement(((RestApiSpecific) platformSpec).getConversionFromJsonString(paramName + "_json", "i", mapType.getInterfaceTypeName())); + localBlock.addStatement(getCodeForConversionFromMapToMap(paramType, "i", paramName, langSpec)); + paramConverter.add(localBlock); ((RestApiSpecific) platformSpec).addJsonException(update); } - if (paramConverter.length() > 0 && (update.getBody() == null || !update.getBody().getStatements().contains(paramConverter))) { - update.addFirstStatement(paramConverter); + if (paramConverter.size() > 0 && (update.getBody() == null || !update.getBody().contains(paramConverter))) { + update.getBody().addFirstStatements(paramConverter); } } } @@ -1976,8 +1976,8 @@ Expression refGetter = getPullAccessor(platformSpec).getDirectStateAccessorFor(ref, srcRes); String refExp = refGetter.toImplementation(sideEffects); String refTypeName = ref.getResourceStateType().getInterfaceTypeName(); - forLoopBlock.addStatement(sideEffects[0] + langSpec.newVariableDeclaration(ref.getResourceStateType(), refVarName) - + langSpec.getAssignment() + refExp + langSpec.getStatementDelimiter()); + if (sideEffects[0] != null && !sideEffects[0].isEmpty()) forLoopBlock.addStatement(sideEffects[0]); + forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(ref.getResourceStateType(), refVarName, new PlainExpression(refExp))); } } refParams.add(new AbstractMap.SimpleEntry<>(ref.getResourceStateType(), @@ -2747,7 +2747,8 @@ String[] sideEffects = new String[] {""}; String refExp = refGetter.toImplementation(sideEffects); String refTypeName = ref.getResourceStateType().getInterfaceTypeName(); - forLoopBlock.addStatement(sideEffects[0] + langSpec.newVariableDeclaration(ref.getResourceStateType(), refVarName) + langSpec.getAssignment() + refExp + langSpec.getStatementDelimiter()); + if (sideEffects[0] != null && !sideEffects[0].isEmpty()) forLoopBlock.addStatement(sideEffects[0]); + forLoopBlock.addStatement(langSpec.newVariableDeclarationStatement(ref.getResourceStateType(), refVarName, new PlainExpression(refExp))); } refParams.add(new AbstractMap.SimpleEntry<>(ref.getResourceStateType(), new AbstractMap.SimpleEntry<>(refVarName, diff --git a/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java b/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java index 2dfe533..b80bd4c 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java @@ -14,10 +14,13 @@ CompilationUnit newCompilationUnit(TypeDeclaration component); TypeDeclaration newTypeDeclaration(String typeName); VariableDeclaration newVariableDeclaration(Type type, String varName); + VariableDeclarationStatement newVariableDeclarationStatement(Type type, String varName); + VariableDeclarationStatement newVariableDeclarationStatement(Type type, String varName, Expression initializer); MethodDeclaration newMethodDeclaration(String methodName, Type returnType); MethodDeclaration newMethodDeclaration(String methodName, boolean isConstructor, Type returnType, List parameters); FieldDeclaration newFieldDeclaration(Type fieldType, String fieldName); FieldDeclaration newFieldDeclaration(Type fieldType, String fieldName, String fieldInitializer); + Block newBlock(); ListType newListType(Type compType); ListType newListType(Type compType, Type parentListType); MapType newMapType(Type keyType, String compTypeName); @@ -41,14 +44,15 @@ ForStatement getForStatementForList(String varName, String list); EnhancedForStatement getForStatementForCollection(VariableDeclaration varDeclaration, String collection); EnhancedForStatement getForStatementForMap(String varName, String map); + ExpressionStatement getAssignmentStatement(String left, String right); String toComponentName(String name); String toVariableName(String name); String getMainComponentName(); String getAssignment(); String getStatementDelimiter(); String getStringDelimiter(); - String getOpeningScoreDelimiter(); - String getClosingScoreDelimiter(); + String getOpeningScopeDelimiter(); + String getClosingScopeDelimiter(); String getValueToStringExp(String typeName, String valueExp); String getStringToValueExp(String typeName, String strExp); String getPairExp(String first, String second); diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java index 6548d62..81b3d8e 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java @@ -48,6 +48,20 @@ public VariableDeclaration newVariableDeclaration(Type type, String varName) { return new VariableDeclaration(type, varName); } + + @Override + public VariableDeclarationStatement newVariableDeclarationStatement(Type type, String varName) { + VariableDeclarationStatement varStatement = new VariableDeclarationStatement(); + varStatement.addFragment(new VariableDeclaration(type, varName)); + return varStatement; + } + + @Override + public VariableDeclarationStatement newVariableDeclarationStatement(Type type, String varName, Expression initializer) { + VariableDeclarationStatement varStatement = new VariableDeclarationStatement(); + varStatement.addFragment(new VariableDeclaration(type, varName, initializer)); + return varStatement; + } @Override public MethodDeclaration newMethodDeclaration(String methodName, Type returnType) { @@ -164,6 +178,11 @@ jsonType.addParentType(parentJsonType); return jsonType; } + + @Override + public Block newBlock() { + return new Block(); + } @Override public boolean declareField() { @@ -298,6 +317,11 @@ return enhancedForStatement; } + + @Override + public ExpressionStatement getAssignmentStatement(String left, String right) { + return new ExpressionStatement(new Assignment(new Variable(left), new PlainExpression(right))); + } @Override public String toComponentName(String name) { @@ -330,12 +354,12 @@ } @Override - public String getOpeningScoreDelimiter() { + public String getOpeningScopeDelimiter() { return "{"; } @Override - public String getClosingScoreDelimiter() { + public String getClosingScopeDelimiter() { return "}"; }