Class Node

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable

    public class Node
    extends java.lang.Object
    implements java.lang.Cloneable, java.io.Serializable
    This class implements the root of the intermediate representation.
    See Also:
    Serialized Form
    • Constructor Detail

      • Node

        public Node​(int nodeType)
      • Node

        public Node​(int nodeType,
                    Node child)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node right)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node right)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node mid2,
                    Node right)
      • Node

        public Node​(int nodeType,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node child,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node right,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node right,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node mid2,
                    Node right,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node[] children,
                    int lineno,
                    int charno)
      • Node

        public Node​(int nodeType,
                    Node[] children)
    • Method Detail

      • newNumber

        public static Node newNumber​(double number)
      • newNumber

        public static Node newNumber​(double number,
                                     int lineno,
                                     int charno)
      • newString

        public static Node newString​(java.lang.String str)
      • newString

        public static Node newString​(int type,
                                     java.lang.String str)
      • newString

        public static Node newString​(java.lang.String str,
                                     int lineno,
                                     int charno)
      • newString

        public static Node newString​(int type,
                                     java.lang.String str,
                                     int lineno,
                                     int charno)
      • getType

        public int getType()
      • setType

        public void setType​(int type)
      • hasChildren

        public boolean hasChildren()
      • getFirstChild

        public Node getFirstChild()
      • getLastChild

        public Node getLastChild()
      • getNext

        public Node getNext()
      • getChildBefore

        public Node getChildBefore​(Node child)
      • getChildAtIndex

        public Node getChildAtIndex​(int i)
      • getIndexOfChild

        public int getIndexOfChild​(Node child)
      • getLastSibling

        public Node getLastSibling()
      • addChildToFront

        public void addChildToFront​(Node child)
      • addChildToBack

        public void addChildToBack​(Node child)
      • addChildrenToFront

        public void addChildrenToFront​(Node children)
      • addChildrenToBack

        public void addChildrenToBack​(Node children)
      • addChildBefore

        public void addChildBefore​(Node newChild,
                                   Node node)
        Add 'child' before 'node'.
      • addChildAfter

        public void addChildAfter​(Node newChild,
                                  Node node)
        Add 'child' after 'node'.
      • addChildrenAfter

        public void addChildrenAfter​(Node children,
                                     Node node)
        Add all children after 'node'.
      • removeChild

        public void removeChild​(Node child)
        Detach a child from its parent and siblings.
      • replaceChild

        public void replaceChild​(Node child,
                                 Node newChild)
        Detaches child from Node and replaces it with newChild.
      • replaceChildAfter

        public void replaceChildAfter​(Node prevChild,
                                      Node newChild)
      • clonePropsFrom

        public Node clonePropsFrom​(Node other)
        Clone the properties from the provided node without copying the property object. The receiving node may not have any existing properties.
        Parameters:
        other - The node to clone properties from.
        Returns:
        this node.
      • removeProp

        public void removeProp​(int propType)
      • getProp

        public java.lang.Object getProp​(int propType)
      • getBooleanProp

        public boolean getBooleanProp​(int propType)
      • getIntProp

        public int getIntProp​(int propType)
        Returns the integer value for the property, or 0 if the property is not defined.
      • getExistingIntProp

        public int getExistingIntProp​(int propType)
      • putProp

        public void putProp​(int propType,
                            java.lang.Object value)
      • putBooleanProp

        public void putBooleanProp​(int propType,
                                   boolean value)
      • putIntProp

        public void putIntProp​(int propType,
                               int value)
      • getDouble

        public double getDouble()
                         throws java.lang.UnsupportedOperationException
        Can only be called when getType() == TokenStream.NUMBER
        Throws:
        java.lang.UnsupportedOperationException
      • setDouble

        public void setDouble​(double value)
                       throws java.lang.UnsupportedOperationException
        Can only be called when getType() == Token.NUMBER
        Parameters:
        value - value to set.
        Throws:
        java.lang.UnsupportedOperationException
      • getString

        public java.lang.String getString()
                                   throws java.lang.UnsupportedOperationException
        Can only be called when node has String context.
        Throws:
        java.lang.UnsupportedOperationException
      • setString

        public void setString​(java.lang.String value)
                       throws java.lang.UnsupportedOperationException
        Can only be called for a Token.STRING or Token.NAME.
        Parameters:
        value - the value to set.
        Throws:
        java.lang.UnsupportedOperationException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • toString

        public java.lang.String toString​(boolean printSource,
                                         boolean printAnnotations,
                                         boolean printType)
      • toStringTree

        public java.lang.String toStringTree()
      • appendStringTree

        public void appendStringTree​(java.lang.Appendable appendable)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • setStaticSourceFile

        public void setStaticSourceFile​(StaticSourceFile file)
      • setSourceFileForTesting

        public void setSourceFileForTesting​(java.lang.String name)
        Sets the source file to a non-extern file of the given name.
      • getSourceFileName

        public java.lang.String getSourceFileName()
      • getStaticSourceFile

        public StaticSourceFile getStaticSourceFile()
        Returns the source file associated with this input. May be null
      • setInputId

        public void setInputId​(InputId inputId)
        Parameters:
        inputId -
      • getInputId

        public InputId getInputId()
        Returns:
        The Id of the CompilerInput associated with this Node.
      • isFromExterns

        public boolean isFromExterns()
      • getLength

        public int getLength()
      • setLength

        public void setLength​(int length)
      • getLineno

        public int getLineno()
      • getCharno

        public int getCharno()
      • getSourceOffset

        public int getSourceOffset()
      • getSourcePosition

        public int getSourcePosition()
      • setLineno

        public void setLineno​(int lineno)
      • setCharno

        public void setCharno​(int charno)
      • setSourceEncodedPosition

        public void setSourceEncodedPosition​(int sourcePosition)
      • setSourceEncodedPositionForTree

        public void setSourceEncodedPositionForTree​(int sourcePosition)
      • mergeLineCharNo

        protected static int mergeLineCharNo​(int lineno,
                                             int charno)
        Merges the line number and character number in one integer. The Character number takes the first 12 bits and the line number takes the rest. If the character number is greater than 212-1 it is adjusted to 212-1.
      • extractLineno

        protected static int extractLineno​(int lineCharNo)
        Extracts the line number and character number from a merged line char number (see mergeLineCharNo(int, int)).
      • extractCharno

        protected static int extractCharno​(int lineCharNo)
        Extracts the character number and character number from a merged line char number (see mergeLineCharNo(int, int)).
      • children

        public java.lang.Iterable<Node> children()

        Return an iterable object that iterates over this node's children. The iterator does not support the optional operation Iterator.remove().

        To iterate over a node's siblings, one can write

        Node n = ...;
         for (Node child : n.children()) { ...
      • siblings

        public java.lang.Iterable<Node> siblings()

        Return an iterable object that iterates over this node's siblings. The iterator does not support the optional operation Iterator.remove().

        To iterate over a node's siblings, one can write

        Node n = ...;
         for (Node sibling : n.siblings()) { ...
      • getParent

        public Node getParent()
      • getAncestor

        public Node getAncestor​(int level)
        Gets the ancestor node relative to this.
        Parameters:
        level - 0 = this, 1 = the parent, etc.
      • getAncestors

        public Node.AncestorIterable getAncestors()
        Iterates all of the node's ancestors excluding itself.
      • hasOneChild

        public boolean hasOneChild()
        Check for one child more efficiently than by iterating over all the children as is done with Node.getChildCount().
        Returns:
        Whether the node has exactly one child.
      • hasMoreThanOneChild

        public boolean hasMoreThanOneChild()
        Check for more than one child more efficiently than by iterating over all the children as is done with Node.getChildCount().
        Returns:
        Whether the node more than one child.
      • getChildCount

        public int getChildCount()
      • hasChild

        public boolean hasChild​(Node child)
      • checkTreeEquals

        public java.lang.String checkTreeEquals​(Node node2)
        Checks if the subtree under this node is the same as another subtree. Returns null if it's equal, or a message describing the differences.
      • isEquivalentTo

        public boolean isEquivalentTo​(Node node)
        Returns true if this node is equivalent semantically to another
      • isEquivalentToTyped

        public boolean isEquivalentToTyped​(Node node)
        Returns true if this node is equivalent semantically to another and the types are equivalent.
      • getQualifiedName

        public java.lang.String getQualifiedName()
        This function takes a set of GETPROP nodes and produces a string that is each property separated by dots. If the node ultimately under the left sub-tree is not a simple name, this is not a valid qualified name.
        Returns:
        a null if this is not a qualified name, or a dot-separated string of the name and properties.
      • isQualifiedName

        public boolean isQualifiedName()
        Returns whether a node corresponds to a simple or a qualified name, such as x or a.b.c or this.a.
      • isUnscopedQualifiedName

        public boolean isUnscopedQualifiedName()
        Returns whether a node corresponds to a simple or a qualified name without a "this" reference, such as a.b.c, but not this.a .
      • detachFromParent

        public Node detachFromParent()
        Removes this node from its parent. Equivalent to: node.getParent().removeChild();
      • removeFirstChild

        public Node removeFirstChild()
        Removes the first child of Node. Equivalent to: node.removeChild(node.getFirstChild());
        Returns:
        The removed Node.
      • removeChildren

        public Node removeChildren()
        Returns:
        A Node that is the head of the list of children.
      • detachChildren

        public void detachChildren()
        Removes all children from this node and isolates the children from each other.
      • removeChildAfter

        public Node removeChildAfter​(Node prev)
      • cloneNode

        public Node cloneNode()
        Returns:
        A detached clone of the Node, specifically excluding its children.
      • cloneTree

        public Node cloneTree()
        Returns:
        A detached clone of the Node and all its children.
      • copyInformationFrom

        public Node copyInformationFrom​(Node other)
        Copies source file and name information from the other node given to the current node. Used for maintaining debug information across node append and remove operations.
        Returns:
        this
      • copyInformationFromForTree

        public Node copyInformationFromForTree​(Node other)
        Copies source file and name information from the other node to the entire tree rooted at this node.
        Returns:
        this
      • useSourceInfoFrom

        public Node useSourceInfoFrom​(Node other)
        Overwrite all the source information in this node with that of other.
      • srcref

        public Node srcref​(Node other)
      • useSourceInfoFromForTree

        public Node useSourceInfoFromForTree​(Node other)
        Overwrite all the source information in this node and its subtree with that of other.
      • srcrefTree

        public Node srcrefTree​(Node other)
      • useSourceInfoIfMissingFrom

        public Node useSourceInfoIfMissingFrom​(Node other)
        Overwrite all the source information in this node with that of other iff the source info is missing.
      • useSourceInfoIfMissingFromForTree

        public Node useSourceInfoIfMissingFromForTree​(Node other)
        Overwrite all the source information in this node and its subtree with that of other iff the source info is missing.
      • getJSType

        public JSType getJSType()
      • setJSType

        public void setJSType​(JSType jsType)
      • getJSDocInfo

        public JSDocInfo getJSDocInfo()
        Get the JSDocInfo attached to this node.
        Returns:
        the information or null if no JSDoc is attached to this node
      • setVarArgs

        public void setVarArgs​(boolean varArgs)
        Sets whether this node is a variable length argument node. This method is meaningful only on Token.NAME nodes used to define a Token.FUNCTION's argument list.
      • isVarArgs

        public boolean isVarArgs()
        Returns whether this node is a variable length argument node. This method's return value is meaningful only on Token.NAME nodes used to define a Token.FUNCTION's argument list.
      • setOptionalArg

        public void setOptionalArg​(boolean optionalArg)
        Sets whether this node is an optional argument node. This method is meaningful only on Token.NAME nodes used to define a Token.FUNCTION's argument list.
      • isOptionalArg

        public boolean isOptionalArg()
        Returns whether this node is an optional argument node. This method's return value is meaningful only on Token.NAME nodes used to define a Token.FUNCTION's argument list.
      • setIsSyntheticBlock

        public void setIsSyntheticBlock​(boolean val)
        Sets whether this is a synthetic block that should not be considered a real source block.
      • isSyntheticBlock

        public boolean isSyntheticBlock()
        Returns whether this is a synthetic block that should not be considered a real source block.
      • setDirectives

        public void setDirectives​(java.util.Set<java.lang.String> val)
        Sets the ES5 directives on this node.
      • getDirectives

        public java.util.Set<java.lang.String> getDirectives()
        Returns the set of ES5 directives for this node.
      • addSuppression

        public void addSuppression​(java.lang.String warning)
        Adds a warning to be suppressed. This is indistinguishable from having a @suppress tag in the code.
      • setWasEmptyNode

        public void setWasEmptyNode​(boolean val)
        Sets whether this is a synthetic block that should not be considered a real source block.
      • wasEmptyNode

        public boolean wasEmptyNode()
        Returns whether this is a synthetic block that should not be considered a real source block.
      • setSideEffectFlags

        public void setSideEffectFlags​(int flags)
        Marks this function or constructor call's side effect flags. This property is only meaningful for Token.CALL and Token.NEW nodes.
      • getSideEffectFlags

        public int getSideEffectFlags()
        Returns the side effects flags for this node.
      • isOnlyModifiesThisCall

        public boolean isOnlyModifiesThisCall()
        Returns:
        Whether the only side-effect is "modifies this"
      • isNoSideEffectsCall

        public boolean isNoSideEffectsCall()
        Returns true if this node is a function or constructor call that has no side effects.
      • isLocalResultCall

        public boolean isLocalResultCall()
        Returns true if this node is a function or constructor call that returns a primitive or a local object (an object that has no other references).
      • isQuotedString

        public boolean isQuotedString()
        This should only be called for STRING nodes children of OBJECTLIT.
      • setQuotedString

        public void setQuotedString()
        This should only be called for STRING nodes children of OBJECTLIT.
      • isAdd

        public boolean isAdd()
        AST type check methods
      • isAnd

        public boolean isAnd()
      • isArrayLit

        public boolean isArrayLit()
      • isAssign

        public boolean isAssign()
      • isAssignAdd

        public boolean isAssignAdd()
      • isBlock

        public boolean isBlock()
      • isBreak

        public boolean isBreak()
      • isCall

        public boolean isCall()
      • isCase

        public boolean isCase()
      • isCast

        public boolean isCast()
      • isCatch

        public boolean isCatch()
      • isComma

        public boolean isComma()
      • isContinue

        public boolean isContinue()
      • isDebugger

        public boolean isDebugger()
      • isDec

        public boolean isDec()
      • isDefaultCase

        public boolean isDefaultCase()
      • isDelProp

        public boolean isDelProp()
      • isDo

        public boolean isDo()
      • isEmpty

        public boolean isEmpty()
      • isExprResult

        public boolean isExprResult()
      • isFalse

        public boolean isFalse()
      • isFor

        public boolean isFor()
      • isFunction

        public boolean isFunction()
      • isGetterDef

        public boolean isGetterDef()
      • isGetElem

        public boolean isGetElem()
      • isGetProp

        public boolean isGetProp()
      • isHook

        public boolean isHook()
      • isIf

        public boolean isIf()
      • isIn

        public boolean isIn()
      • isInc

        public boolean isInc()
      • isInstanceOf

        public boolean isInstanceOf()
      • isLabel

        public boolean isLabel()
      • isLabelName

        public boolean isLabelName()
      • isName

        public boolean isName()
      • isNE

        public boolean isNE()
      • isNew

        public boolean isNew()
      • isNot

        public boolean isNot()
      • isNull

        public boolean isNull()
      • isNumber

        public boolean isNumber()
      • isObjectLit

        public boolean isObjectLit()
      • isOr

        public boolean isOr()
      • isParamList

        public boolean isParamList()
      • isRegExp

        public boolean isRegExp()
      • isReturn

        public boolean isReturn()
      • isScript

        public boolean isScript()
      • isSetterDef

        public boolean isSetterDef()
      • isString

        public boolean isString()
      • isStringKey

        public boolean isStringKey()
      • isSwitch

        public boolean isSwitch()
      • isThis

        public boolean isThis()
      • isThrow

        public boolean isThrow()
      • isTrue

        public boolean isTrue()
      • isTry

        public boolean isTry()
      • isTypeOf

        public boolean isTypeOf()
      • isVar

        public boolean isVar()
      • isVoid

        public boolean isVoid()
      • isWhile

        public boolean isWhile()
      • isWith

        public boolean isWith()