Class ASTMethodReference
- java.lang.Object
-
- net.sourceforge.pmd.lang.ast.impl.AbstractNode<B,N>
-
- net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
- net.sourceforge.pmd.lang.java.ast.ASTMethodReference
-
- All Implemented Interfaces:
GenericNode<JavaNode>
,JjtreeNode<JavaNode>
,Node
,TextAvailableNode
,ASTExpression
,ASTMemberValue
,ASTPrimaryExpression
,ASTSwitchArrowRHS
,FunctionalExpression
,JavaNode
,MethodUsage
,QualifiableExpression
,TypeNode
,Reportable
public final class ASTMethodReference extends AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode> implements ASTPrimaryExpression, QualifiableExpression, MethodUsage, FunctionalExpression
Method or constructor reference expression.MethodReference ::=
Expression
"::"TypeArguments
? <IDENTIFIER> |TypeExpression
"::"TypeArguments
? "new"
-
-
Field Summary
Fields Modifier and Type Field Description protected JSymbolTable
symbolTable
-
Fields 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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <P,R>
RacceptVisitor(AstVisitor<? super P,? extends R> visitor, P data)
protected <P,R>
RacceptVisitor(JavaVisitor<? super P,? extends R> visitor, P data)
protected void
addChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index)
protected @Nullable Object
buildConstValue()
@Nullable Object
getConstValue()
Returns the constant value of this node, if this is a constant expression.@Nullable ASTTypeArguments
getExplicitTypeArguments()
Returns the explicit type arguments mentioned after the "::" if they exist.JMethodSig
getFunctionalMethod()
Returns the method that is overridden in the functional interface.TypeNode
getLhs()
Returns the LHS, whether it is a type or an expression.@NonNull String
getMethodName()
Returns the method name, or anJConstructorSymbol.CTOR_NAME
if this is a constructor reference.int
getParenthesisDepth()
Returns the number of parenthesis levels around this expression.@NonNull ASTExpression
getQualifier()
Returns the node to the left of the "::".JMethodSig
getReferencedMethod()
Returns the method that is referenced.@NonNull ASTCompilationUnit
getRoot()
@NonNull JSymbolTable
getSymbolTable()
Returns the symbol table for the program point represented by this node.@NonNull JTypeMirror
getTypeMirror()
Returns the type of the functional interface.@NonNull JTypeMirror
getTypeMirror(TypingContext context)
TypeSystem
getTypeSystem()
Returns the type system with which this node was created.String
getXPathNodeName()
protected void
insertChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index)
boolean
isConstructorReference()
Returns true if this is a constructor reference, e.g.void
jjtClose()
protected void
removeChildAtIndex(int childIndex)
protected void
setChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index)
protected void
setFirstToken(JavaccToken token)
protected void
setImage(String image)
protected void
setLastToken(JavaccToken token)
-
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.java.ast.ASTExpression
getConstValue, getConversionContext, getParenthesisDepth, isCompileTimeConstant, isExpression, isParenthesized
-
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 net.sourceforge.pmd.lang.java.ast.JavaNode
getEnclosingType, getRoot, getSymbolTable, getTypeSystem
-
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
acceptVisitor, ancestors, children, compareLocation, descendants, firstChild, getAstInfo, getBeginColumn, getBeginLine, getEndColumn, getEndLine, getImage, getIndexInParent, getLanguageVersion, getNumChildren, getReportLocation, getTextDocument, getUserMap, getXPathAttributesIterator, getXPathNodeName, hasImageEqualTo, isFindBoundary
-
Methods inherited from interface net.sourceforge.pmd.lang.ast.TextAvailableNode
getOriginalText, getText, getTextRegion
-
Methods inherited from interface net.sourceforge.pmd.lang.java.ast.TypeNode
getTypeMirror
-
-
-
-
Field Detail
-
symbolTable
protected JSymbolTable symbolTable
-
-
Method Detail
-
jjtClose
public void jjtClose()
-
getLhs
public TypeNode getLhs()
Returns the LHS, whether it is a type or an expression. Returns null if this is an unqualified method call.
-
isConstructorReference
public boolean isConstructorReference()
Returns true if this is a constructor reference, e.g.ArrayList::new
.
-
getQualifier
public @NonNull ASTExpression getQualifier()
Returns the node to the left of the "::". This may be atype expression
, or anambiguous name
.Note that if this is a constructor reference, then this can only return a type expression.
- Specified by:
getQualifier
in interfaceQualifiableExpression
-
getExplicitTypeArguments
public @Nullable ASTTypeArguments getExplicitTypeArguments()
Returns the explicit type arguments mentioned after the "::" if they exist. Type arguments mentioned before the "::", if any, are contained within the lhs type.
-
getMethodName
public @NonNull String getMethodName()
Returns the method name, or anJConstructorSymbol.CTOR_NAME
if this is a constructor reference.- Specified by:
getMethodName
in interfaceMethodUsage
-
acceptVisitor
protected <P,R> R acceptVisitor(JavaVisitor<? super P,? extends R> visitor, P data)
-
getTypeMirror
public @NonNull JTypeMirror getTypeMirror()
Returns the type of the functional interface. E.g. instringStream.map(String::isEmpty)
, this isjava.util.function.Function<java.lang.String, java.lang.Boolean>
.- Specified by:
getTypeMirror
in interfaceFunctionalExpression
- Specified by:
getTypeMirror
in interfaceTypeNode
- Returns:
- The type mirror. Never returns null; if the type is unresolved, returns
TypeSystem.UNKNOWN
. - See Also:
getFunctionalMethod()
,getReferencedMethod()
-
getFunctionalMethod
public JMethodSig getFunctionalMethod()
Returns the method that is overridden in the functional interface. E.g. instringStream.map(String::isEmpty)
, this isjava.util.function.Function#apply(java.lang.String) -> java.lang.Boolean
- Specified by:
getFunctionalMethod
in interfaceFunctionalExpression
- See Also:
getReferencedMethod()
,getTypeMirror()
-
getReferencedMethod
public JMethodSig getReferencedMethod()
Returns the method that is referenced. E.g. instringStream.map(String::isEmpty)
, this isjava.lang.String.isEmpty() -> boolean
.This is called the compile-time declaration of the method reference in the JLS.
If no such method can be found, returns
TypeSystem.UNRESOLVED_METHOD
.- See Also:
getFunctionalMethod()
,getTypeMirror()
-
getParenthesisDepth
public int getParenthesisDepth()
Description copied from interface:ASTExpression
Returns the number of parenthesis levels around this expression. If this method returns 0, then no parentheses are present.E.g. the expression
(a + b)
is parsed as an AdditiveExpression whose parenthesisDepth is 1, and in((a + b))
it's 2.This is to avoid the parentheses interfering with analysis. Parentheses already influence parsing by breaking the natural precedence of operators. It would mostly hide false positives to make a ParenthesizedExpr node, because it would make semantically equivalent nodes have a very different representation.
On the other hand, when a rule explicitly cares about parentheses, then this attribute may be used to find out whether parentheses were mentioned, so no information is lost.
- Specified by:
getParenthesisDepth
in interfaceASTExpression
-
getConstValue
public @Nullable Object getConstValue()
Description copied from interface:ASTMemberValue
Returns the constant value of this node, if this is a constant expression. Otherwise, or if some references couldn't be resolved, returns null. Note thatnull
is not a constant value, so this method's returning null is not a problem. Note that annotations are not given a constant value by this implementation.- Specified by:
getConstValue
in interfaceASTExpression
- Specified by:
getConstValue
in interfaceASTMemberValue
-
buildConstValue
protected @Nullable Object buildConstValue()
-
getTypeMirror
public @NonNull JTypeMirror getTypeMirror(TypingContext context)
- Specified by:
getTypeMirror
in interfaceTypeNode
-
acceptVisitor
public final <P,R> R acceptVisitor(AstVisitor<? super P,? extends R> visitor, P data)
- Specified by:
acceptVisitor
in interfaceNode
-
addChild
protected void addChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index)
- Overrides:
addChild
in classAbstractJjtreeNode<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 classAbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
removeChildAtIndex
protected void removeChildAtIndex(int childIndex)
- Overrides:
removeChildAtIndex
in classAbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
setImage
protected void setImage(String image)
- Overrides:
setImage
in classAbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
setFirstToken
protected void setFirstToken(JavaccToken token)
- Overrides:
setFirstToken
in classAbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
setLastToken
protected void setLastToken(JavaccToken token)
- Overrides:
setLastToken
in classAbstractJjtreeNode<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 classAbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
-
getSymbolTable
public @NonNull JSymbolTable getSymbolTable()
Description copied from interface:JavaNode
Returns the symbol table for the program point represented by this node.- Specified by:
getSymbolTable
in interfaceJavaNode
-
getTypeSystem
public TypeSystem 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
public final @NonNull ASTCompilationUnit getRoot()
-
getXPathNodeName
public final String getXPathNodeName()
- Specified by:
getXPathNodeName
in interfaceNode
-
-