Class BaseTree

  • All Implemented Interfaces:
    Tree
    Direct Known Subclasses:
    CommonTree, ParseTree, RemoteDebugEventSocketListener.ProxyTree

    public abstract class BaseTree
    extends Object
    implements Tree
    A generic tree implementation with no payload. You must subclass to actually have any user data. ANTLR v3 uses a list of children approach instead of the child-sibling approach in v2. A flat tree (a list) is an empty node whose children represent the list. An empty, but non-null node is called "nil".
    • Constructor Detail

      • BaseTree

        public BaseTree()
      • BaseTree

        public BaseTree​(Tree node)
        Create a new node from an existing node does nothing for BaseTree as there are no fields other than the children list, which cannot be copied as the children are not considered part of this node.
    • Method Detail

      • getChild

        public Tree getChild​(int i)
        Specified by:
        getChild in interface Tree
      • getChildren

        public List<? extends Object> getChildren()
        Get the children internal List; note that if you directly mess with the list, do so at your own risk.
      • getFirstChildWithType

        public Tree getFirstChildWithType​(int type)
      • getChildCount

        public int getChildCount()
        Specified by:
        getChildCount in interface Tree
      • addChild

        public void addChild​(Tree t)
        Add t as child of this node. Warning: if t has no children, but child does and child isNil then this routine moves children to t via t.children = child.children; i.e., without copying the array.
        Specified by:
        addChild in interface Tree
      • addChildren

        public void addChildren​(List<? extends Tree> kids)
        Add all elements of kids list as children of this node
      • setChild

        public void setChild​(int i,
                             Tree t)
        Description copied from interface: Tree
        Set ith child (0..n-1) to t; t must be non-null and non-nil node
        Specified by:
        setChild in interface Tree
      • insertChild

        public void insertChild​(int i,
                                Object t)
        Insert child t at child position i (0..n-1) by shifting children i+1..n-1 to the right one position. Set parent / indexes properly but does NOT collapse nil-rooted t's that come in here like addChild.
      • replaceChildren

        public void replaceChildren​(int startChildIndex,
                                    int stopChildIndex,
                                    Object t)
        Delete children from start to stop and replace with t even if t is a list (nil-root tree). num of children can increase or decrease. For huge child lists, inserting children can force walking rest of children to set their childindex; could be slow.
        Specified by:
        replaceChildren in interface Tree
      • createChildrenList

        protected List<Object> createChildrenList()
        Override in a subclass to change the impl of children list
      • isNil

        public boolean isNil()
        Description copied from interface: Tree
        Indicates the node is a nil node but may still have children, meaning the tree is a flat list.
        Specified by:
        isNil in interface Tree
      • freshenParentAndChildIndexes

        public void freshenParentAndChildIndexes()
        Set the parent and child index values for all child of t
        Specified by:
        freshenParentAndChildIndexes in interface Tree
      • freshenParentAndChildIndexes

        public void freshenParentAndChildIndexes​(int offset)
      • freshenParentAndChildIndexesDeeply

        public void freshenParentAndChildIndexesDeeply()
      • freshenParentAndChildIndexesDeeply

        public void freshenParentAndChildIndexesDeeply​(int offset)
      • sanityCheckParentAndChildIndexes

        public void sanityCheckParentAndChildIndexes()
      • sanityCheckParentAndChildIndexes

        public void sanityCheckParentAndChildIndexes​(Tree parent,
                                                     int i)
      • getChildIndex

        public int getChildIndex()
        BaseTree doesn't track child indexes.
        Specified by:
        getChildIndex in interface Tree
      • setChildIndex

        public void setChildIndex​(int index)
        Specified by:
        setChildIndex in interface Tree
      • getParent

        public Tree getParent()
        BaseTree doesn't track parent pointers.
        Specified by:
        getParent in interface Tree
      • setParent

        public void setParent​(Tree t)
        Specified by:
        setParent in interface Tree
      • hasAncestor

        public boolean hasAncestor​(int ttype)
        Walk upwards looking for ancestor with this token type.
        Specified by:
        hasAncestor in interface Tree
      • getAncestor

        public Tree getAncestor​(int ttype)
        Walk upwards and get first ancestor with this token type.
        Specified by:
        getAncestor in interface Tree
      • getAncestors

        public List<? extends Tree> getAncestors()
        Return a list of all ancestors of this node. The first node of list is the root and the last is the parent of this node.
        Specified by:
        getAncestors in interface Tree
      • toStringTree

        public String toStringTree()
        Print out a whole tree not just a node
        Specified by:
        toStringTree in interface Tree
      • getLine

        public int getLine()
        Description copied from interface: Tree
        In case we don't have a token payload, what is the line for errors?
        Specified by:
        getLine in interface Tree
      • toString

        public abstract String toString()
        Override to say how a node (not a tree) should look as text
        Specified by:
        toString in interface Tree
        Overrides:
        toString in class Object