package io.vertx.codetrans.expression;

import io.vertx.codetrans.CodeBuilder;
import io.vertx.codetrans.CodeWriter;

import java.util.ArrayList;
import java.util.List;

Author:Julien Viet
/** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */
public class BinaryExpressionModel extends ExpressionModel { final ExpressionModel left; final String op; final ExpressionModel right; public BinaryExpressionModel(CodeBuilder builder, ExpressionModel left, String op, ExpressionModel right) { super(builder); this.left = left; this.op = op; this.right = right; } @Override public boolean isStringDecl() { return op.equals("+") && (left.isStringDecl() || right.isStringDecl()); } public ExpressionModel getLeft() { return left; } public String getOp() { return op; } public ExpressionModel getRight() { return right; } @Override public void render(CodeWriter writer) { if (op.equals("+") && (left.isStringDecl() || right.isStringDecl())) { ArrayList<Object> parts = new ArrayList<>(); collectParts(parts); writer.renderStringLiteral(parts); } else { writer.renderBinary(this); } } void collectParts(List<Object> parts) { if (left.isStringDecl()) { left.collectParts(parts); } else { parts.add(left); } if (right.isStringDecl()) { right.collectParts(parts); } else { parts.add(right); } } }