module antlr.v4.runtime.tree.xpath.XPathTokenElement;

import antlr.v4.runtime.tree.xpath.XPathElement;
import antlr.v4.runtime.tree.ParseTree;
import antlr.v4.runtime.tree.TerminalNode;
import antlr.v4.runtime.tree.Tree;
import antlr.v4.runtime.tree.Trees;

/**
 * TODO add class description
 */
class XPathTokenElement : XPathElement
{

    public int tokenType;

    public this(string tokenName, int tokenType)
    {
        super(tokenName);
        this.tokenType = tokenType;
    }

    /**
     * @uml
     * @override
     */
    public override ParseTree[] evaluate(ParseTree t)
    {
	// return all children of t that match nodeName
        ParseTree[] nodes;
        foreach (Tree c; Trees.getChildren(t)) {
            if (c.classinfo == TerminalNode.classinfo) {
                TerminalNode tnode = cast(TerminalNode)c;
                if ((tnode.getSymbol().getType() == tokenType && !invert) ||
                    (tnode.getSymbol().getType() != tokenType && invert))
                    {
                        nodes ~= tnode;
                    }
            }
        }
        return nodes;
    }

}