diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java index 3b1d8ce..c9e1ced 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java @@ -5,6 +5,8 @@ import models.dataConstraintModel.JsonAccessor; import models.dataConstraintModel.JsonTerm; +import java.util.List; + /** * This class is a Java implementation of {@link IExpressionVisitor} * which holds and manages the actual method of implementation code generation @@ -15,7 +17,7 @@ private static int jsonCount = 0; @Override - public String visit(Term term, String[] sideEffects) { + public code.ast.Expression visit(Term term, String[] sideEffects) { int[] implParamOrder = term.getSymbol().getImplParamOrder(); if (term.getSymbol().isImplLambda()) { String[] components = term.getSymbol().getImplName().split("->"); @@ -152,39 +154,51 @@ } @Override - public String visit(Field field, String[] sideEffects) { - return "this." + visit((Constant) field, sideEffects); + public code.ast.Expression visit(Field field, String[] sideEffects) { + return new code.ast.FieldAccess(new code.ast.ThisExpression(), visit((Constant) field, sideEffects).toString()); } @Override - public String visit(Constant constant, String[] sideEffects) { + public code.ast.Expression visit(Constant constant, String[] sideEffects) { if (constant.getSymbol().isImplGenerative()) { String exp = constant.getSymbol().generate(constant.getType(), new Type[]{}, new String[]{}, new String[]{}, sideEffects); return exp; } - return constant.getSymbol().getImplName(); + + return new code.ast.Constant(constant.getSymbol().getImplName()); } @Override - public String visit(Variable variable, String[] sideEffects) { - return variable.getName(); + public code.ast.Expression visit(Variable variable, String[] sideEffects) { + return new code.ast.Variable(variable.getName()); } @Override - public String visit(JsonTerm jsonTerm, String[] sideEffects) { + public code.ast.Expression visit(JsonTerm jsonTerm, String[] sideEffects) { String temp = "temp_json" + jsonCount; jsonCount++; + + code.ast.Type mapType = new code.ast.SimpleType("Map"); + code.ast.Type stringType = new code.ast.SimpleType("String"); + code.ast.Type objectType = new code.ast.SimpleType("Object"); + + code.ast.Type type = new code.ast.ParameterizedType(mapType, List.of(stringType, objectType)); + code.ast.VariableDeclaration fragment = new code.ast.VariableDeclaration(new Type("Map", type.toString()), temp); + + // TODO: Implement this correctly + String impl = ""; impl += "Map " + temp + " = new HashMap<>();\n"; for (String key : jsonTerm.keySet()) { impl += temp + ".put(\"" + key + "\", " + jsonTerm.get(key).accept(this, sideEffects) + ");\n"; } sideEffects[0] += impl; + return temp; } @Override - public String visit(JsonAccessor jsonAccessor, String[] sideEffects) { + public code.ast.Expression visit(JsonAccessor jsonAccessor, String[] sideEffects) { if (jsonAccessor.getSymbol().equals(DataConstraintModel.dotParam)) { return jsonAccessor.getChildren().get(0).accept(this, sideEffects) + "." + jsonAccessor.getSymbol().toImplementation() + "(" + jsonAccessor.getChildren().get(1).accept(this, sideEffects) + ")"; } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java index 2b0e579..78f1b37 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java @@ -44,11 +44,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java index 65345a1..1f79f27 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java @@ -32,7 +32,7 @@ return getSubTerms(Variable.class); } - public abstract String accept(IExpressionVisitor visitor, String[] sideEffects); + public abstract code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects); /** * Get the implementation of this expression. diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java index 93076df..73fd891 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java @@ -42,11 +42,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java index a8a88f5..29e5c2a 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java @@ -4,15 +4,15 @@ import models.dataConstraintModel.JsonTerm; public interface IExpressionVisitor { - String visit(Term term, String[] sideEffects); + code.ast.Expression visit(Term term, String[] sideEffects); - String visit(Field field, String[] sideEffects); + code.ast.Expression visit(Field field, String[] sideEffects); - String visit(Constant constant, String[] sideEffects); + code.ast.Expression visit(Constant constant, String[] sideEffects); - String visit(Variable variable, String[] sideEffects); + code.ast.Expression visit(Variable variable, String[] sideEffects); - String visit(JsonTerm jsonTerm, String[] sideEffects); + code.ast.Expression visit(JsonTerm jsonTerm, String[] sideEffects); - String visit(JsonAccessor jsonAccessor, String[] sideEffects); + code.ast.Expression visit(JsonAccessor jsonAccessor, String[] sideEffects); } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java index 72f71a8..32f97c4 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -312,11 +312,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java index 336a87f..eca4319 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java @@ -84,11 +84,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java index 1cf0c22..de7eb5b 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java @@ -205,11 +205,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java index 608a27e..26d796a 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java @@ -91,11 +91,11 @@ } public String toImplementation(String[] sideEffects) { - return accept(new JavaImplementationVisitor(), sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects).toString(); } @Override - public String accept(IExpressionVisitor visitor, String[] sideEffects) { + public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { return visitor.visit(this, sideEffects); } }