CommonPairNode.java

package edu.udel.cis.vsl.abc.ast.node.common;

import java.io.PrintStream;

import edu.udel.cis.vsl.abc.ast.node.IF.ASTNode;
import edu.udel.cis.vsl.abc.ast.node.IF.PairNode;
import edu.udel.cis.vsl.abc.token.IF.Source;

public class CommonPairNode<S extends ASTNode, T extends ASTNode> extends
		CommonASTNode implements PairNode<S, T> {

	public CommonPairNode(Source source, S left, T right) {
		super(source, left, right);
	}

	@SuppressWarnings("unchecked")
	@Override
	public S getLeft() {
		return (S) child(0);
	}

	@SuppressWarnings("unchecked")
	@Override
	public T getRight() {
		return (T) child(1);
	}

	@Override
	public void setLeft(S child) {
		setChild(0, child);
	}

	@Override
	public void setRight(T child) {
		setChild(1, child);
	}

	@Override
	protected void printBody(PrintStream out) {
	}

	@Override
	public PairNode<S, T> copy() {
		S left = getLeft();
		@SuppressWarnings("unchecked")
		S leftCopy = left == null ? null : (S) left.copy();
		T right = getRight();
		@SuppressWarnings("unchecked")
		T rightCopy = right == null ? null : (T) right.copy();

		return new CommonPairNode<S, T>(getSource(), leftCopy, rightCopy);
	}

	@Override
	public NodeKind nodeKind() {
		return NodeKind.PAIR;
	}
}