package net.iplantevin.ql.ast.statements; import net.iplantevin.ql.ast.LineInfo; import net.iplantevin.ql.ast.expressions.Expression; import net.iplantevin.ql.ast.expressions.literals.ID; import net.iplantevin.ql.ast.expressions.literals.Str; import net.iplantevin.ql.ast.types.Type; import net.iplantevin.ql.ast.visitors.IStatementVisitor; /** * Computed question. In addition to name, label and type, also has an Expression. * * @author Ivan */ public class Computation extends Questionable { private final Expression expression; public Computation(ID identifier, Str label, Type type, Expression expression, LineInfo lineInfo) { super(identifier, label, type, lineInfo); this.expression = expression; } public Expression getExpression() { return expression; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (! super.equals(o)) return false; Computation that = (Computation) o; if (!expression.equals(that.expression)) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + expression.hashCode(); return result; } @Override public String toString() { return super.toString() + "(" + expression.toString() + ")\n"; } @Override public <T> T accept(IStatementVisitor<T> visitor) { return visitor.visit(this); } }