diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java index 7438a44..3b1d8ce 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java @@ -5,6 +5,12 @@ import models.dataConstraintModel.JsonAccessor; import models.dataConstraintModel.JsonTerm; +/** + * This class is a Java implementation of {@link IExpressionVisitor} + * which holds and manages the actual method of implementation code generation + * + * @author s-yamagiwa + */ public class JavaImplementationVisitor implements IExpressionVisitor { private static int jsonCount = 0; @@ -147,11 +153,7 @@ @Override public String visit(Field field, String[] sideEffects) { - if (field.getSymbol().isImplGenerative()) { - String exp = field.getSymbol().generate(field.getType(), new Type[]{}, new String[]{}, new String[]{}, sideEffects); - return "this." + exp; - } - return "this." + field.getSymbol().getImplName(); + return "this." + visit((Constant) field, sideEffects); } @Override @@ -186,140 +188,6 @@ if (jsonAccessor.getSymbol().equals(DataConstraintModel.dotParam)) { return jsonAccessor.getChildren().get(0).accept(this, sideEffects) + "." + jsonAccessor.getSymbol().toImplementation() + "(" + jsonAccessor.getChildren().get(1).accept(this, sideEffects) + ")"; } - - // Same logic of JavaImplementationVisitor#visit(Term, String[[]) - int[] implParamOrder = jsonAccessor.getSymbol().getImplParamOrder(); - if (jsonAccessor.getSymbol().isImplLambda()) { - String[] components = jsonAccessor.getSymbol().getImplName().split("->"); - String component0 = components[0].replace("(", "").replace(")", ""); - String[] params = component0.split(","); - String exp = components[1]; - String receiver = ""; - if (implParamOrder == null) { - receiver = jsonAccessor.getChildren().get(0).accept(this, sideEffects); - exp = exp.replace(params[0], receiver); - for (int i = 1; i < params.length; i++) { - exp = exp.replace(params[i], jsonAccessor.getChildren().get(i).accept(this, sideEffects)); - } - } else { - receiver = jsonAccessor.getChildren().get(implParamOrder[0]).accept(this, sideEffects); - exp = exp.replace(params[0], receiver); - for (int i = 1; i < params.length; i++) { - exp = exp.replace(params[i], jsonAccessor.getChildren().get(implParamOrder[i]).accept(this, sideEffects)); - } - } - if (jsonAccessor.getSymbol().isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } - if (jsonAccessor.getSymbol().isImplGenerative()) { - Type[] childrenTypes = new Type[jsonAccessor.getChildren().size()]; - String[] childrenImpl = new String[jsonAccessor.getChildren().size()]; - String[] childrenSideEffects = new String[jsonAccessor.getChildren().size()]; - if (implParamOrder == null) { - for (int i = 0; i < jsonAccessor.getChildren().size(); i++) { - Expression child = jsonAccessor.getChildren().get(i); - if (child instanceof Variable) { - childrenTypes[i] = ((Variable) child).getType(); - } else if (child instanceof Term) { - childrenTypes[i] = ((Term) child).getType(); - } - String[] childSideEffect = new String[]{""}; - childrenImpl[i] = child.accept(this, childSideEffect); - childrenSideEffects[i] = childSideEffect[0]; - } - String exp = jsonAccessor.getSymbol().generate(jsonAccessor.getType(), childrenTypes, childrenImpl, childrenSideEffects, sideEffects); - if (jsonAccessor.getSymbol().isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp; - exp = childrenImpl[0]; // the value of this jsonAccessor - } - return exp; - } else { - for (int i = 0; i < jsonAccessor.getChildren().size(); i++) { - Expression child = jsonAccessor.getChildren().get(implParamOrder[i]); - if (child instanceof Variable) { - childrenTypes[i] = ((Variable) child).getType(); - } else if (child instanceof Term) { - childrenTypes[i] = ((Term) child).getType(); - } - String[] childSideEffect = new String[]{""}; - childrenImpl[i] = child.accept(this, childSideEffect); - childrenSideEffects[i] = childSideEffect[0]; - } - String exp = jsonAccessor.getSymbol().generate(jsonAccessor.getType(), childrenTypes, childrenImpl, childrenSideEffects, sideEffects); - if (jsonAccessor.getSymbol().isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp; - exp = childrenImpl[0]; // the value of this jsonAccessor - } - return exp; - } - } - if (jsonAccessor.getArity() == 2 && jsonAccessor.getSymbol().isImplInfix()) { - if (implParamOrder == null) { - return "(" + jsonAccessor.getChildren().get(0).accept(this, sideEffects) + jsonAccessor.getSymbol().toImplementation() + jsonAccessor.getChildren().get(1).accept(this, sideEffects) + ")"; - } else { - return "(" + jsonAccessor.getChildren().get(implParamOrder[0]).accept(this, sideEffects) + jsonAccessor.getSymbol().toImplementation() + jsonAccessor.getChildren().get(implParamOrder[1]).accept(this, sideEffects) + ")"; - } - } - if ((jsonAccessor.getArity() >= 1 || jsonAccessor.getArity() == -1) && jsonAccessor.getSymbol().isImplMethod()) { - if (implParamOrder == null) { - String exp = null; - String receiver = ""; - if (jsonAccessor.getChildren().size() > 0 && jsonAccessor.getChildren().get(0) != null) { - receiver = jsonAccessor.getChildren().get(0).accept(this, sideEffects); - exp = receiver + "." + jsonAccessor.getSymbol().toImplementation() + "("; - } else { - exp = jsonAccessor.getSymbol().toImplementation() + "("; - } - String delimiter = ""; - for (int i = 1; i < jsonAccessor.getChildren().size(); i++) { - Expression e = jsonAccessor.getChildren().get(i); - exp += (delimiter + e.accept(this, sideEffects)); - delimiter = ","; - } - exp += ")"; - if (jsonAccessor.getSymbol().isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } else { - String receiver = jsonAccessor.getChildren().get(implParamOrder[0]).accept(this, sideEffects); - String exp = receiver + "." + jsonAccessor.getSymbol().toImplementation() + "("; - String delimiter = ""; - for (int i = 1; i < jsonAccessor.getChildren().size(); i++) { - Expression e = jsonAccessor.getChildren().get(implParamOrder[i]); - exp += (delimiter + e.accept(this, sideEffects)); - delimiter = ","; - } - exp += ")"; - if (jsonAccessor.getSymbol().isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } - } else { - if (implParamOrder == null) { - String exp = jsonAccessor.getSymbol().toImplementation() + "("; - String delimiter = ""; - for (Expression e : jsonAccessor.getChildren()) { - exp += (delimiter + e.accept(this, sideEffects)); - delimiter = ","; - } - return exp + ")"; - } else { - String exp = jsonAccessor.getSymbol().toImplementation() + "("; - String delimiter = ""; - for (int i = 0; i < jsonAccessor.getChildren().size(); i++) { - Expression e = jsonAccessor.getChildren().get(implParamOrder[i]); - exp += (delimiter + e.accept(this, sideEffects)); - delimiter = ","; - } - return exp + ")"; - } - } + return visit((Term) jsonAccessor, sideEffects); } }