Interface Node

    • Field Detail

      • COORDS_COMPARATOR

        static final Comparator<Node> COORDS_COMPARATOR
        Compares nodes according to their location in the file. Note that this comparator is not consistent with equals (see Comparator) as some nodes have the same location.
    • Method Detail

      • getImage

        @Deprecated
        default String getImage()
        Deprecated.
        Should be replaced with methods that have more specific names in node classes.
        Returns a string token, usually filled-in by the parser, which describes some textual characteristic of this node. This is usually an identifier, but you should check that using the Designer. On most nodes though, this method returns null.
      • hasImageEqualTo

        @Deprecated
        default boolean hasImageEqualTo​(String image)
        Deprecated.
        Returns true if this node's image is equal to the given string.
        Parameters:
        image - The image to check
      • compareLocation

        default int compareLocation​(Node other)
        Compare the coordinates of this node with the other one as if with COORDS_COMPARATOR. The result is useless if both nodes are not from the same tree.
        Parameters:
        other - Other node
        Returns:
        A positive integer if this node comes AFTER the other, 0 if they have the same position, a negative integer if this node comes BEFORE the other
      • getTextRegion

        TextRegion getTextRegion()
        Returns a region of text delimiting the node in the underlying text document. This does not necessarily match the report location.
      • getBeginLine

        default int getBeginLine()
        Description copied from interface: Reportable
        Gets the line where the token's region begins
        Specified by:
        getBeginLine in interface Reportable
      • getBeginColumn

        default int getBeginColumn()
        Description copied from interface: Reportable
        Gets the column offset from the start of the begin line where the token's region begins
        Specified by:
        getBeginColumn in interface Reportable
      • getEndLine

        default int getEndLine()
        Description copied from interface: Reportable
        Gets the line where the token's region ends
        Specified by:
        getEndLine in interface Reportable
      • getEndColumn

        default int getEndColumn()
        Description copied from interface: Reportable
        Gets the column offset from the start of the end line where the token's region ends
        Specified by:
        getEndColumn in interface Reportable
      • isFindBoundary

        default boolean isFindBoundary()
        Returns true if this node is considered a boundary by traversal methods. Traversal methods such as descendants() don't look past such boundaries by default, which is usually the expected thing to do. For example, in Java, lambdas and nested classes are considered find boundaries.

        Note: This attribute is deprecated for XPath queries. It is not useful for XPath queries and will be removed with PMD 7.0.0.

        Returns:
        True if this node is a find boundary
        See Also:
        NodeStream.DescendantNodeStream.crossFindBoundaries(boolean)
      • getNthParent

        @Deprecated
        default Node getNthParent​(int n)
        Deprecated.
        Use node stream methods: node.ancestors().get(n-1)
        Returns the n-th parent or null if there are less than n ancestors.
        
            getNthParent(1) == jjtGetParent
         
        Parameters:
        n - how many ancestors to iterate over.
        Returns:
        the n-th parent or null.
        Throws:
        IllegalArgumentException - if n is negative or zero.
      • getFirstParentOfType

        @Deprecated
        default <T extends Node> T getFirstParentOfType​(Class<? extends T> parentType)
        Deprecated.
        Use node stream methods: node.ancestors(parentType).first()
        Traverses up the tree to find the first parent instance of type parentType or one of its subclasses.
        Type Parameters:
        T - The type you want to find
        Parameters:
        parentType - Class literal of the type you want to find
        Returns:
        Node of type parentType. Returns null if none found.
      • getParentsOfType

        @Deprecated
        default <T extends NodeList<T> getParentsOfType​(Class<? extends T> parentType)
        Deprecated.
        Use node stream methods: node.ancestors(parentType).toList(). Most usages don't really need a list though, eg you can iterate the node stream instead
        Traverses up the tree to find all of the parent instances of type parentType or one of its subclasses. The nodes are ordered deepest-first.
        Type Parameters:
        T - The type you want to find
        Parameters:
        parentType - Class literal of the type you want to find
        Returns:
        List of parentType instances found.
      • findChildrenOfType

        @Deprecated
        default <T extends NodeList<T> findChildrenOfType​(Class<? extends T> childType)
        Deprecated.
        Use node stream methods: node.children(childType).toList(). Most usages don't really need a list though, eg you can iterate the node stream instead
        Traverses the children to find all the instances of type childType or one of its subclasses.
        Parameters:
        childType - class which you want to find.
        Returns:
        List of all children of type childType. Returns an empty list if none found.
        See Also:
        if traversal of the entire tree is needed.
      • findDescendantsOfType

        @Deprecated
        default <T extends NodeList<T> findDescendantsOfType​(Class<? extends T> targetType)
        Deprecated.
        Use node stream methods: node.descendants(targetType).toList(). Most usages don't really need a list though, eg you can iterate the node stream instead
        Traverses down the tree to find all the descendant instances of type descendantType without crossing find boundaries.
        Parameters:
        targetType - class which you want to find.
        Returns:
        List of all children of type targetType. Returns an empty list if none found.
      • findDescendantsOfType

        @Deprecated
        default <T extends NodeList<T> findDescendantsOfType​(Class<? extends T> targetType,
                                                               boolean crossFindBoundaries)
        Deprecated.
        Use node stream methods: node.descendants(targetType).crossFindBoundaries(b).toList(). Most usages don't really need a list though, eg you can iterate the node stream instead
        Traverses down the tree to find all the descendant instances of type descendantType.
        Parameters:
        targetType - class which you want to find.
        crossFindBoundaries - if false, recursion stops for nodes for which isFindBoundary() is true
        Returns:
        List of all matching descendants
      • getFirstDescendantOfType

        @Deprecated
        default <T extends Node> T getFirstDescendantOfType​(Class<? extends T> descendantType)
        Deprecated.
        Use node stream methods: node.descendants(targetType).first().
        Traverses down the tree to find the first descendant instance of type descendantType without crossing find boundaries.
        Parameters:
        descendantType - class which you want to find.
        Returns:
        Node of type descendantType. Returns null if none found.
      • hasDescendantOfType

        @Deprecated
        default <T extends Node> boolean hasDescendantOfType​(Class<? extends T> type)
        Deprecated.
        Use node stream methods: node.descendants(targetType).nonEmpty().
        Finds if this node contains a descendant of the given type without crossing find boundaries.
        Parameters:
        type - the node type to search
        Returns:
        true if there is at least one descendant of the given type
      • findChildNodesWithXPath

        @Deprecated
        default List<Node> findChildNodesWithXPath​(String xpathString)
        Deprecated.
        This is very inefficient and should not be used in new code. PMD 7.0.0 will remove support for this method.
        Returns all the nodes matching the xpath expression.
        Parameters:
        xpathString - the expression to check
        Returns:
        List of all matching nodes. Returns an empty list if none found.
      • getUserMap

        DataMap<DataMap.DataKey<?,​?>> getUserMap()
        Returns a data map used to store additional information on this node.
        Returns:
        The user data map of this node
        Since:
        6.22.0
      • getTextDocument

        default @NonNull TextDocument getTextDocument()
        Returns the text document from which this tree was parsed. This means, that the whole file text is in memory while the AST is.
        Returns:
        The text document
      • getParent

        Node getParent()
        Returns the parent of this node, or null if this is the root of the tree.
        Returns:
        The parent of this node
        Since:
        6.21.0
      • getNumChildren

        int getNumChildren()
        Returns the number of children of this node.
        Since:
        6.21.0
      • getIndexInParent

        int getIndexInParent()
        Returns the index of this node in its parent's children. If this node is a root node, returns -1.
        Returns:
        The index of this node in its parent's children
        Since:
        6.21.0
      • acceptVisitor

        default <P,​R> R acceptVisitor​(AstVisitor<? super P,​? extends R> visitor,
                                            P data)
        Calls back the visitor's visit method corresponding to the runtime type of this Node. This should usually be preferred to calling a visit method directly (usually the only calls to those are in the implementations of this acceptVisitor method).
        Type Parameters:
        R - Return type of the visitor
        P - Parameter type of the visitor
        Parameters:
        visitor - Visitor to dispatch
        data - Parameter to the visit
        Returns:
        What the visitor returned. If this node doesn't recognize the type of the visitor, returns visitor.cannotVisit(this, data).
        Since:
        7.0.0
      • getXPathNodeName

        String getXPathNodeName()
        Gets the name of the node that is used to match it with XPath queries.
        Returns:
        The XPath node name
      • getXPathAttributesIterator

        default Iterator<Attribute> getXPathAttributesIterator()
        Returns an iterator enumerating all the attributes that are available from XPath for this node.
        Returns:
        An attribute iterator for this node
      • getFirstChild

        default @Nullable Node getFirstChild()
        Returns the first child of this node, or null if it doesn't exist.
        Since:
        7.0.0
      • getLastChild

        default @Nullable Node getLastChild()
        Returns the first last of this node, or null if it doesn't exist.
        Since:
        7.0.0
      • getPreviousSibling

        default @Nullable Node getPreviousSibling()
        Returns the previous sibling of this node, or null if it does not exist.
        Since:
        7.0.0
      • getNextSibling

        default @Nullable Node getNextSibling()
        Returns the next sibling of this node, or null if it does not exist.
        Since:
        7.0.0
      • ancestors

        default NodeStream<? extends Node> ancestors()
        Returns a node stream containing all the strict ancestors of this node, in innermost to outermost order. The returned stream doesn't contain this node, and is empty if this node has no parent.
        Returns:
        A node stream of the ancestors of this node
        Since:
        7.0.0
        See Also:
        NodeStream.ancestors()
      • ancestorsOrSelf

        default NodeStream<? extends Node> ancestorsOrSelf()
        Returns a node stream containing this node and its ancestors. The nodes of the returned stream are yielded in a depth-first fashion.
        Returns:
        A stream of ancestors
        Since:
        7.0.0
        See Also:
        NodeStream.ancestorsOrSelf()
      • children

        default <R extends NodeNodeStream<R> children​(Class<? extends R> rClass)
        Returns a node stream of the children of this node that are of the given type.
        Type Parameters:
        R - Type of node the returned stream should contain
        Parameters:
        rClass - Type of node the returned stream should contain
        Returns:
        A new node stream
        Since:
        7.0.0
        See Also:
        NodeStream.children(Class)
      • firstChild

        default <R extends Node> @Nullable R firstChild​(Class<? extends R> rClass)
        Returns the first child of this node that has the given type. Returns null if no such child exists.

        If you want to process this element as a node stream, use asStream().firstChild(rClass) instead, which returns a node stream.

        Type Parameters:
        R - Type of the child to find
        Parameters:
        rClass - Type of the child to find
        Returns:
        A child, or null
        Since:
        7.0.0
      • ancestors

        default <R extends NodeNodeStream<R> ancestors​(Class<? extends R> rClass)
        Returns the ancestor stream of this node filtered by the given node type.
        Type Parameters:
        R - Type of node the returned stream should contain
        Parameters:
        rClass - Type of node the returned stream should contain
        Returns:
        A new node stream
        Since:
        7.0.0
        See Also:
        NodeStream.ancestors(Class)
      • getRoot

        default @NonNull RootNode getRoot()
        Returns the root of the tree this node is declared in.
        Since:
        7.0.0
      • getLanguageVersion

        default LanguageVersion getLanguageVersion()
        Returns the language version of this node.