Interface Node
- All Superinterfaces:
Reportable
- All Known Subinterfaces:
AntlrNode<N>,CommentNode,GenericNode<N>,JjtreeNode<N>,RootNode,ScopedNode,TextAvailableNode,TextNode
- All Known Implementing Classes:
AbstractJjtreeNode,AbstractNode,BaseAntlrErrorNode,BaseAntlrInnerNode,BaseAntlrNode,BaseAntlrTerminalNode,PlainTextLanguage.PlainTextFile
- Tree traversal methods:
getParent(),getIndexInParent(),getChild(int), andgetNumChildren(). These four basic operations are used to implement more specific traversal operations, likefirstChild(Class), andNodeStreams. - The API used to describe nodes in a form understandable by XPath expressions:
getXPathNodeName(),getXPathAttributesIterator() - Location metadata:
getReportLocation() - An extensible metadata store:
getUserMap()
Every language implementation must publish a sub-interface of Node
which serves as a supertype for all nodes of that language (e.g.
pmd-java provides JavaNode, pmd-apex provides ApexNode, etc.). It is
assumed in many places that the getChild(int) and getParent()
method return an instance of this sub-interface. For example,
no JSP node should have a Java node as its child. Embedding nodes from
different languages will not be done via these methods, and conforming
implementations should ensure that every node returned by these methods
are indeed of the same type.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Comparator<Node>Compares nodes according to their location in the file. -
Method Summary
Modifier and TypeMethodDescriptiondefault <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.default NodeStream<? extends Node>Returns a node stream containing all the strict ancestors of this node, in innermost to outermost order.default <R extends Node>
NodeStream<R>Returns the ancestor stream of this node filtered by the given node type.default NodeStream<? extends Node>Returns a node stream containing this node and its ancestors.default NodeStream<? extends Node>asStream()Returns a node stream containing only this node.default NodeStream<? extends Node>children()Returns a node stream containing all the children of this node.default <R extends Node>
NodeStream<R>Returns a node stream of the children of this node that are of the given type.default intcompareLocation(Node other) Compare the coordinates of this node with the other one as if withCOORDS_COMPARATOR.default NodeStream.DescendantNodeStream<? extends Node>Returns a node stream containing all the descendants of this node.default <R extends Node>
NodeStream.DescendantNodeStream<R>descendants(Class<? extends R> rClass) Returns a node stream of the descendants of this node that are of the given type.default NodeStream.DescendantNodeStream<? extends Node>Returns a node stream containing this node, then all its descendants.default <R extends Node>
@Nullable RfirstChild(Class<? extends R> rClass) Returns the first child of this node that has the given type.Returns theAstInfofor this root node.default intdefault intgetChild(int index) Returns the child of this node at the given index.default intdefault intdefault @Nullable NodeReturns the first child of this node, or null if it doesn't exist.default StringgetImage()Returns a string token, usually filled-in by the parser, which describes some textual characteristic of this node.intReturns the index of this node in its parent's children.default LanguageVersionReturns the language version of this node.default @Nullable NodeReturns the first last of this node, or null if it doesn't exist.default @Nullable NodeReturns the next sibling of this node, or null if it does not exist.intReturns the number of children of this node.Returns the parent of this node, or null if this is the root of the tree.default @Nullable NodeReturns the previous sibling of this node, or null if it does not exist.default FileLocationReturns the location at which this element should be reported.default @NonNull RootNodegetRoot()Returns the root of the tree this node is declared in.default @NonNull TextDocumentReturns the text document from which this tree was parsed.Returns a region of text delimiting the node in the underlying text document.DataMap<DataMap.DataKey<?,?>> Returns a data map used to store additional information on this node.Returns an iterator enumerating all the attributes that are available from XPath for this node.Gets the name of the node that is used to match it with XPath queries.default booleanhasImageEqualTo(String image) Returns true if this node's image is equal to the given string.default booleanReturns true if this node is considered a boundary by traversal methods.
-
Field Details
-
COORDS_COMPARATOR
Compares nodes according to their location in the file. Note that this comparator is not consistent with equals (seeComparator) as some nodes have the same location.
-
-
Method Details
-
getImage
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 returnsnull.Note: This method will be deprecated in the future (#4787). It will be replaced with methods that have more specific names in node classes. In some cases, there are already alternatives available that should be used.
-
hasImageEqualTo
Returns true if this node's image is equal to the given string.Note: This method will be deprecated in the future (#4787). See
getImage().- Parameters:
image- The image to check
-
compareLocation
Compare the coordinates of this node with the other one as if withCOORDS_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
-
getReportLocation
Returns the location at which this element should be reported.Use this instead of
getBeginColumn()/getBeginLine(), etc. This is not necessarily the exact boundaries of the node in the text. Nodes that can provide exact position information do so using aTextRegion, by implementingTextAvailableNode.Use this instead of
getBeginColumn()/getBeginLine(), etc.- Specified by:
getReportLocationin interfaceReportable
-
getTextRegion
TextRegion getTextRegion()Returns a region of text delimiting the node in the underlying text document. This does not necessarily match thereport location. -
getBeginLine
default int getBeginLine() -
getBeginColumn
default int getBeginColumn() -
getEndLine
default int getEndLine() -
getEndColumn
default int getEndColumn() -
isFindBoundary
Returns true if this node is considered a boundary by traversal methods. Traversal methods such asdescendants()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.- Returns:
- True if this node is a find boundary
- See Also:
-
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
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
-
getChild
Returns the child of this node at the given index.- Throws:
IndexOutOfBoundsException- if the index is negative or greater thangetNumChildren().- 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
Calls back the visitor's visit method corresponding to the runtime type of this Node. This should usually be preferred to calling avisitmethod directly (usually the only calls to those are in the implementations of thisacceptVisitormethod).- Implementation Requirements:
- A typical implementation will check the type of the visitor to
be that of the language specific visitor, then call the most specific
visit method of this Node. This is typically implemented by having
a different override per concrete node class (no shortcuts).
The default implementation calls back
AstVisitor.cannotVisit(Node, Object). - Type Parameters:
R- Return type of the visitorP- Parameter type of the visitor- Parameters:
visitor- Visitor to dispatchdata- 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
-
getAstInfo
Returns theAstInfofor this root node.- Implementation Note:
- This default implementation can not work unless overridden in the root node.
-
getXPathNodeName
String getXPathNodeName()Gets the name of the node that is used to match it with XPath queries.- Returns:
- The XPath node name
-
getXPathAttributesIterator
Returns an iterator enumerating all the attributes that are available from XPath for this node.- Returns:
- An attribute iterator for this node
- See Also:
-
getFirstChild
Returns the first child of this node, or null if it doesn't exist.- Since:
- 7.0.0
-
getLastChild
Returns the first last of this node, or null if it doesn't exist.- Since:
- 7.0.0
-
getPreviousSibling
Returns the previous sibling of this node, or null if it does not exist.- Since:
- 7.0.0
-
getNextSibling
Returns the next sibling of this node, or null if it does not exist.- Since:
- 7.0.0
-
asStream
Returns a node stream containing only this node.NodeStream.of(Node)is a null-safe version of this method.- Returns:
- A node stream containing only this node
- Since:
- 7.0.0
- See Also:
-
children
Returns a node stream containing all the children of this node. This method does not provide much type safety, you'll probably want to usechildren(Class).- Since:
- 7.0.0
- See Also:
-
descendants
Returns a node stream containing all the descendants of this node. SeeNodeStream.DescendantNodeStreamfor details.- Returns:
- A node stream of the descendants of this node
- Since:
- 7.0.0
- See Also:
-
descendantsOrSelf
Returns a node stream containing this node, then all its descendants. SeeNodeStream.DescendantNodeStreamfor details.- Returns:
- A node stream of the whole subtree topped by this node
- Since:
- 7.0.0
- See Also:
-
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:
-
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:
-
children
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:
-
firstChild
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
-
descendants
Returns a node stream of the descendants of this node that are of the given type. SeeNodeStream.DescendantNodeStreamfor details.- 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:
-
ancestors
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:
-
getRoot
Returns the root of the tree this node is declared in.- Since:
- 7.0.0
-
getLanguageVersion
Returns the language version of this node.
-