Expression.java

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

import java.util.Collection;
import java.util.HashSet;

import edu.udel.cis.vsl.tass.model.IF.ModelFactoryIF;
import edu.udel.cis.vsl.tass.model.IF.expression.ExpressionIF;
import edu.udel.cis.vsl.tass.model.IF.type.TypeIF;
import edu.udel.cis.vsl.tass.model.IF.variable.VariableIF;
import edu.udel.cis.vsl.tass.util.Source;

public abstract class Expression implements ExpressionIF {

	protected ModelFactoryIF factory;
	protected Collection<VariableIF> freeVariables = new HashSet<VariableIF>();
	protected TypeIF type;
	protected ExpressionKind kind;
	private Source sourceCode;

	private Object dynamicValue;

	public Expression(ModelFactoryIF factory, ExpressionKind kind) {
		this.factory = factory;
		this.kind = kind;
	}

	@Override
	public Collection<VariableIF> freeVariables() {
		return freeVariables;
	}

	public TypeIF type() {
		return type;
	}

	public ExpressionKind kind() {
		return kind;
	}

	public Source getSource() {
		return sourceCode;
	}

	public void setSource(Source sourceCode) {
		this.sourceCode = sourceCode;
	}

	public void setDynamicValue(Object object) {
		this.dynamicValue = object;
	}

	public Object dynamicValue() {
		return dynamicValue;
	}
}