VariableReferenceNode.java

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

import java.io.PrintWriter;

import edu.udel.cis.vsl.tass.ast.IF.ASTNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.AbstractSyntaxTreeIF;
import edu.udel.cis.vsl.tass.ast.IF.IdentifierNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.declaration.VariableDeclarationNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.expression.VariableReferenceNodeIF;

public class VariableReferenceNode extends LHSExpressionNode implements
		VariableReferenceNodeIF {

	private VariableDeclarationNodeIF referent = null;

	private String name;

	public VariableReferenceNode(long id, VariableDeclarationNodeIF referent,
			IdentifierNodeIF identifier) {
		super(id);
		this.referent = referent;
		if (identifier != null) {
			this.name = identifier.name();
		}
	}

	public VariableReferenceNode(long id) {
		super(id);
	}

	@Override
	public void setReferent(ASTNodeIF mReferent) {
		referent = (VariableDeclarationNodeIF) mReferent;
	}

	@Override
	public void setReferent(VariableDeclarationNodeIF mReferent) {
		referent = mReferent;
	}

	@Override
	public VariableDeclarationNodeIF referent() {
		return referent;
	}

	public String name() {
		return name;
	}

	public void setName(String newName) {
		this.name = newName;
	}

	@Override
	protected String nodeType() {
		return "Variable Reference";
	}

	@Override
	public String toString() {
		if (referent != null) {
			return super.toString() + " referent: " + referent.id();
		} else {
			return super.toString();
		}
	}

	@Override
	public void toXml(String prefix, PrintWriter out,AbstractSyntaxTreeIF ast) {
		super.toXml(prefix, out,ast);

		out.println(prefix + "<vrn:variableRef>" + referent.id()
				+ "</vrn:variableRef>");
	}

}