org.codehaus.groovy.syntax

## Class CSTNode

- java.lang.Object
- - org.codehaus.groovy.syntax.CSTNode

- Direct Known Subclasses:
    Reduction, Token

      public abstract class CSTNode
      extends Object

  An abstract base class for nodes in the concrete syntax tree that is the result of parsing. Note that the CSTNode is inextricably linked with the Token in that every CSTNode has a Token as it's root.
  Version:
    $Id: CSTNode.java 7922 2007-09-04 01:42:57Z paulk $
  Author:
    bob mcwhirter, Chris Poirier
  See Also:
    `Parser`, `Token`, `Reduction`, `Types`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `CSTNode()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `CSTNode` | `add(CSTNode element)` Adds an element to the node.
    `void` | `addChildrenOf(CSTNode of)` Adds all children of the specified node to this one.
    `abstract Reduction` | `asReduction()` Creates a `Reduction` from this node.
    `boolean` | `canMean(int type)` Returns true if the node can be coerced to the specified type.
    `int` | `children()` Returns the number of non-root elements in the node.
    `abstract CSTNode` | `get(int index)` Returns the specified element, or null.
    `CSTNode` | `get(int index, boolean safe)` Returns the specified element, or Token.NULL if safe is set and the specified element is null (or doesn't exist).
    `String` | `getDescription()` Returns a description of the node.
    `int` | `getMeaning()` Returns the meaning of this node.
    `int` | `getMeaningAs(int[] types)` Returns the first matching meaning of the specified types.
    `abstract Token` | `getRoot()` Returns the root of the node.
    `Token` | `getRoot(boolean safe)` Returns the root of the node, the Token that indicates it's type.
    `String` | `getRootText()` Returns the text of the root.
    `int` | `getStartColumn()` Returns the starting column of the node.
    `int` | `getStartLine()` Returns the starting line of the node.
    `int` | `getType()` Returns the actual type of the node.
    `boolean` | `hasChildren()` Returns true if the node has any non-root elements.
    `boolean` | `isA(int type)` Returns true if the node's meaning matches the specified type.
    `boolean` | `isAllOf(int[] types)` Returns true if the node's meaning matches all of the specified types.
    `boolean` | `isAnExpression()` Returns true if the node is a complete expression.
    `boolean` | `isEmpty()` Returns true if the node is completely empty (no root, even).
    `boolean` | `isOneOf(int[] types)` Returns true if the node's meaning matches any of the specified types.
    `void` | `markAsExpression()` Marks the node a complete expression.
    `CSTNode` | `set(int index, CSTNode element)` Sets an element node in at the specified index.
    `CSTNode` | `setMeaning(int meaning)` Sets the meaning for this node (and it's root Token).
    `abstract int` | `size()` Returns the number of elements in the node (including root).
    `String` | `toString()` Formats the node as a `String` and returns it.
    `void` | `write(PrintWriter writer)` Formats the node and writes it to the specified `Writer`.
    `protected void` | `write(PrintWriter writer, String indent)` Formats the node and writes it to the specified `Writer`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### CSTNode

          public CSTNode()

  - ### Method Detail

    - #### getMeaning

          public int getMeaning()

      Returns the meaning of this node. If the node isEmpty(), returns the type of Token.NULL.

    - #### setMeaning

          public CSTNode setMeaning(int meaning)

      Sets the meaning for this node (and it's root Token). Not valid if the node isEmpty(). Returns the node, for convenience.

    - #### getType

          public int getType()

      Returns the actual type of the node. If the node isEmpty(), returns the type of Token.NULL.

    - #### canMean

          public boolean canMean(int type)

      Returns true if the node can be coerced to the specified type.

    - #### isA

          public boolean isA(int type)

      Returns true if the node's meaning matches the specified type.

    - #### isOneOf

          public boolean isOneOf(int[] types)

      Returns true if the node's meaning matches any of the specified types.

    - #### isAllOf

          public boolean isAllOf(int[] types)

      Returns true if the node's meaning matches all of the specified types.

    - #### getMeaningAs

          public int getMeaningAs(int[] types)

      Returns the first matching meaning of the specified types. Returns Types.UNKNOWN if there are no matches.

    - #### isEmpty

          public boolean isEmpty()

      Returns true if the node is completely empty (no root, even).

    - #### size

          public abstract int size()

      Returns the number of elements in the node (including root).

    - #### hasChildren

          public boolean hasChildren()

      Returns true if the node has any non-root elements.

    - #### children

          public int children()

      Returns the number of non-root elements in the node.

    - #### get

          public abstract CSTNode get(int index)

      Returns the specified element, or null.

    - #### get

          public CSTNode get(int index,
                    boolean safe)

      Returns the specified element, or Token.NULL if safe is set and the specified element is null (or doesn't exist).

    - #### getRoot

          public abstract Token getRoot()

      Returns the root of the node. By convention, all nodes have a Token as the first element (or root), which indicates the type of the node. May return null if the node `isEmpty()`.

    - #### getRoot

          public Token getRoot(boolean safe)

      Returns the root of the node, the Token that indicates it's type. Returns a Token.NULL if safe and the actual root is null.

    - #### getRootText

          public String getRootText()

      Returns the text of the root. Uses `getRoot(true)` to get the root, so you will only receive null in return if the root token returns it.

    - #### getDescription

          public String getDescription()

      Returns a description of the node.

    - #### getStartLine

          public int getStartLine()

      Returns the starting line of the node. Returns -1 if not known.

    - #### getStartColumn

          public int getStartColumn()

      Returns the starting column of the node. Returns -1 if not known.

    - #### markAsExpression

          public void markAsExpression()

      Marks the node a complete expression. Not all nodes support this operation!

    - #### isAnExpression

          public boolean isAnExpression()

      Returns true if the node is a complete expression.

    - #### add

          public CSTNode add(CSTNode element)

      Adds an element to the node. Returns the element for convenience. Not all nodes support this operation!

    - #### addChildrenOf

          public void addChildrenOf(CSTNode of)

      Adds all children of the specified node to this one. Not all nodes support this operation!

    - #### set

          public CSTNode set(int index,
                    CSTNode element)

      Sets an element node in at the specified index. Returns the element for convenience. Not all nodes support this operation!

    - #### asReduction

          public abstract Reduction asReduction()

      Creates a `Reduction` from this node. Returns self if the node is already a `Reduction`.

    - #### toString

          public String toString()

      Formats the node as a `String` and returns it.
      Overrides:
        `toString` in class `Object`

    - #### write

          public void write(PrintWriter writer)

      Formats the node and writes it to the specified `Writer`.

    - #### write

          protected void write(PrintWriter writer,
                   String indent)

      Formats the node and writes it to the specified `Writer`. The indent is prepended to each output line, and is increased for each recursion.