diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java index 996a2c4..0387689 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java @@ -4,6 +4,7 @@ import models.dataConstraintModel.DataConstraintModel; import models.dataConstraintModel.JsonAccessor; import models.dataConstraintModel.JsonTerm; +import parser.Parser; import java.util.ArrayList; import java.util.List; @@ -174,18 +175,39 @@ @Override public code.ast.Expression visit(JsonTerm jsonTerm, String[] sideEffects) { - String temp = "temp_json" + jsonCount; + String tempName = "temp_json" + jsonCount; + code.ast.Variable tempVar = new code.ast.Variable(tempName); jsonCount++; - // TODO: Use proper ASTNode to construct an implementation code - String impl = ""; - impl += "Map " + temp + " = new HashMap<>();\n"; - for (String key : jsonTerm.keySet()) { - impl += temp + ".put(\"" + key + "\", " + jsonTerm.get(key).accept(this, sideEffects).toString() + ");\n"; - } - sideEffects[0] += impl; + code.ast.Block sideEffectsBlock = new code.ast.Block(); - return new code.ast.Variable(temp); + // Map temp_jsonN = new HashMap<>(); + code.ast.VariableDeclaration varDeclaration = new code.ast.VariableDeclaration( + DataConstraintModel.typeJson, + tempName, + new code.ast.ClassInstanceCreation(new code.ast.SimpleType("HashMap")) + ); + code.ast.VariableDeclarationStatement varStatement = new code.ast.VariableDeclarationStatement(); + varStatement.addFragment(varDeclaration); + + sideEffectsBlock.addStatement(varStatement); + + // temp_jsonN.put("key", value); + for (String key : jsonTerm.keySet()) { + code.ast.MethodInvocation putCall = new code.ast.MethodInvocation(tempVar, "put"); + List arguments = new ArrayList<>(); + arguments.add(new code.ast.Constant(Parser.DOUBLE_QUOT + key + Parser.DOUBLE_QUOT)); + arguments.add(jsonTerm.get(key).accept(this, sideEffects)); + putCall.setArguments(arguments); + + sideEffectsBlock.addStatement(new code.ast.ExpressionStatement(putCall)); + } + + for (String statementStr : sideEffectsBlock.getStatements()) { + sideEffects[0] += statementStr + "\n"; + } + + return tempVar; } @Override