Class ASTList<N extends JavaNode>
- Type Parameters:
N
- Type of node contained within this list node
- All Implemented Interfaces:
Iterable<N>
,net.sourceforge.pmd.lang.ast.impl.GenericNode<JavaNode>
,net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeNode<JavaNode>
,net.sourceforge.pmd.lang.ast.Node
,net.sourceforge.pmd.lang.ast.TextAvailableNode
,JavaNode
,net.sourceforge.pmd.reporting.Reportable
- Direct Known Subclasses:
ASTAnnotationMemberList
,ASTArgumentList
,ASTArrayDimensions
,ASTBlock
,ASTExtendsList
,ASTFormalParameters
,ASTImplementsList
,ASTLambdaParameterList
,ASTPatternList
,ASTPermitsList
,ASTRecordComponentList
,ASTResourceList
,ASTStatementExpressionList
,ASTThrowsList
,ASTTypeArguments
,ASTTypeBody
,ASTTypeParameters
public abstract class ASTList<N extends JavaNode>
extends net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
implements Iterable<N>
Common supertype for nodes that act as a kind of list of other nodes.
This is mainly provided as a way to share API and not a structural
distinction in the AST.
This node can be converted to a list with toList()
. Often these
nodes are optional in their parent, and so might be null. The method
orEmpty
helps in such cases. For example
// This will throw NullPointerException if the class is not generic.
for (ASTTypeParameter tparam : classDecl.getTypeParameters()) {
}
Instead of explicitly checking for null, which is annoying, use the
following idiom:
for (ASTTypeParameter tparam : ASTList.orEmpty(classDecl.getTypeParameters())) {
}
Note that though it is usually the case that the node lists all
its children, there is no guarantee about that. For instance,
ASTFormalParameters
excludes the receiver parameter.
-
Field Summary
FieldsFields inherited from class net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode
id
Fields inherited from interface net.sourceforge.pmd.lang.ast.Node
COORDS_COMPARATOR
-
Method Summary
Modifier and TypeMethodDescriptionfinal <P,
R> R acceptVisitor
(net.sourceforge.pmd.lang.ast.AstVisitor<? super P, ? extends R> visitor, P data) protected abstract <P,
R> R acceptVisitor
(JavaVisitor<? super P, ? extends R> visitor, P data) protected void
addChild
(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) protected void
enlargeLeft
(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken child) get
(int i) final @NonNull ASTCompilationUnit
getRoot()
@NonNull JSymbolTable
Returns the symbol table for the program point represented by this node.Returns the type system with which this node was created.final String
protected void
insertChild
(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) boolean
isEmpty()
iterator()
void
jjtClose()
Returns an empty list if the parameter is null, otherwise returns itstoList()
.static <N extends JavaNode>
@NonNull net.sourceforge.pmd.lang.ast.NodeStream<N> orEmptyStream
(@Nullable ASTList<N> list) protected void
removeChildAtIndex
(int childIndex) protected void
setChild
(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) protected void
setFirstToken
(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken token) protected void
protected void
setLastToken
(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken token) static <N extends JavaNode>
@Nullable NsingleOrNull
(@Nullable ASTList<N> list) Returns the element if there is exactly one, otherwise returns null.int
size()
Returns the number of nodes in this list.static int
sizeOrZero
(@Nullable ASTList<?> list) toList()
Returns a list containing the element of this node.net.sourceforge.pmd.lang.ast.NodeStream
<N> toStream()
Returns a node stream containing the same element this node contains.Methods inherited from class net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode
compareLocation, fitTokensToChildren, getFirstToken, getImage, getLastToken, getTextRegion, jjtOpen, toString
Methods inherited from class net.sourceforge.pmd.lang.ast.impl.AbstractNode
children, firstChild, getChild, getIndexInParent, getNumChildren, getParent, getUserMap, remove, setParent
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface net.sourceforge.pmd.lang.ast.impl.GenericNode
ancestors, ancestorsOrSelf, asStream, children, descendants, descendantsOrSelf, getChild, getFirstChild, getLastChild, getNextSibling, getParent, getPreviousSibling
Methods inherited from interface java.lang.Iterable
forEach, spliterator
Methods inherited from interface net.sourceforge.pmd.lang.java.ast.JavaNode
getEnclosingType
Methods inherited from interface net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeNode
getFirstToken, getLastToken, tokens
Methods inherited from interface net.sourceforge.pmd.lang.ast.Node
ancestors, children, compareLocation, descendants, firstChild, getAstInfo, getBeginColumn, getBeginLine, getEndColumn, getEndLine, getImage, getIndexInParent, getLanguageVersion, getNumChildren, getReportLocation, getTextDocument, getUserMap, getXPathAttributesIterator, hasImageEqualTo, isFindBoundary
Methods inherited from interface net.sourceforge.pmd.lang.ast.TextAvailableNode
getOriginalText, getText, getTextRegion
-
Field Details
-
elementType
-
symbolTable
-
-
Method Details
-
size
public int size()Returns the number of nodes in this list. This must be the number of nodes yielded by theiterator()
. -
isEmpty
public boolean isEmpty() -
toList
Returns a list containing the element of this node. -
toStream
Returns a node stream containing the same element this node contains. -
iterator
-
get
- Throws:
IndexOutOfBoundsException
- if not in range
-
orEmpty
Returns an empty list if the parameter is null, otherwise returns itstoList()
.- Type Parameters:
N
- Type of elements- Parameters:
list
- List node- Returns:
- A non-null list
-
orEmptyStream
-
sizeOrZero
-
singleOrNull
Returns the element if there is exactly one, otherwise returns null.- Type Parameters:
N
- Type of elements- Parameters:
list
- List node- Returns:
- An element, or null.
-
jjtClose
public void jjtClose()- Overrides:
jjtClose
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
acceptVisitor
public final <P,R> R acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor<? super P, ? extends R> visitor, P data) - Specified by:
acceptVisitor
in interfacenet.sourceforge.pmd.lang.ast.Node
-
acceptVisitor
-
addChild
protected void addChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) - Overrides:
addChild
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
insertChild
protected void insertChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) - Overrides:
insertChild
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
removeChildAtIndex
protected void removeChildAtIndex(int childIndex) - Overrides:
removeChildAtIndex
in classnet.sourceforge.pmd.lang.ast.impl.AbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
setImage
- Overrides:
setImage
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
setFirstToken
protected void setFirstToken(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken token) - Overrides:
setFirstToken
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
setLastToken
protected void setLastToken(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken token) - Overrides:
setLastToken
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
enlargeLeft
protected void enlargeLeft(net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken child) - Overrides:
enlargeLeft
in classnet.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
setChild
protected void setChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index) - Overrides:
setChild
in classnet.sourceforge.pmd.lang.ast.impl.AbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,
JavaNode>
-
getSymbolTable
Description copied from interface:JavaNode
Returns the symbol table for the program point represented by this node.- Specified by:
getSymbolTable
in interfaceJavaNode
-
getTypeSystem
Description copied from interface:JavaNode
Returns the type system with which this node was created. This is the object responsible for representing types in the compilation unit.- Specified by:
getTypeSystem
in interfaceJavaNode
-
getRoot
-
getXPathNodeName
- Specified by:
getXPathNodeName
in interfacenet.sourceforge.pmd.lang.ast.Node
-