BinaryExpression.java

package edu.udel.cis.vsl.tass.model.impl.expression;

import edu.udel.cis.vsl.tass.model.IF.ModelFactoryIF;
import edu.udel.cis.vsl.tass.model.IF.expression.BinaryExpressionIF;

public abstract class BinaryExpression extends Expression implements
		BinaryExpressionIF {
	protected Expression left;
	protected Expression right;

	protected BinaryExpression(ModelFactoryIF factory, ExpressionKind kind,
			Expression left, Expression right) {
		super(factory, kind);
		if (left == null) {
			throw new NullPointerException(
					"The left subexpression cannot be null.");
		}
		if (right == null) {
			throw new NullPointerException(
					"The right subexpression cannot be null.");
		}
		this.left = left;
		this.right = right;
		freeVariables.addAll(left.freeVariables);
		freeVariables.addAll(right.freeVariables);
	}

	public Expression left() {
		return left;
	}

	public Expression right() {
		return right;
	}

	public boolean equals(Object object) {
		if (object instanceof BinaryExpression) {
			BinaryExpression that = (BinaryExpression) object;

			return kind == that.kind && left.equals(that.left)
					&& right.equals(that.right);
		}
		return false;
	}

	public int hashCode() {
		return left.hashCode() + right.hashCode() + 2048 * kind.hashCode();
	}
}