Class ASTMethodReference

java.lang.Object
net.sourceforge.pmd.lang.ast.impl.AbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
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:
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, ASTExpression, ASTMemberValue, ASTPrimaryExpression, ASTSwitchArrowRHS, FunctionalExpression, JavaNode, MethodUsage, QualifiableExpression, TypeNode, net.sourceforge.pmd.reporting.Reportable

public final class ASTMethodReference extends net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode> implements QualifiableExpression, MethodUsage, FunctionalExpression
Method or constructor reference expression.

 MethodReference ::= Expression "::" TypeArguments? <IDENTIFIER>
                   | TypeExpression "::" TypeArguments? "new"

 
  • Field Details

  • Method Details

    • 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 a type expression, or an ambiguous name.

      Note that if this is a constructor reference, then this can only return a type expression.

      Specified by:
      getQualifier in interface QualifiableExpression
    • 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 an JConstructorSymbol.CTOR_NAME if this is a constructor reference.
      Specified by:
      getMethodName in interface MethodUsage
    • 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. in stringStream.map(String::isEmpty), this is java.util.function.Function<java.lang.String, java.lang.Boolean>.
      Specified by:
      getTypeMirror in interface FunctionalExpression
      Specified by:
      getTypeMirror in interface TypeNode
      Returns:
      The type mirror. Never returns null; if the type is unresolved, returns TypeSystem.UNKNOWN.
      See Also:
    • getFunctionalMethod

      public JMethodSig getFunctionalMethod()
      Returns the method that is overridden in the functional interface. E.g. in stringStream.map(String::isEmpty), this is java.util.function.Function#apply(java.lang.String) -> java.lang.Boolean
      Specified by:
      getFunctionalMethod in interface FunctionalExpression
      See Also:
    • getReferencedMethod

      public JMethodSig getReferencedMethod()
      Returns the method that is referenced. E.g. in stringStream.map(String::isEmpty), this is java.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:
    • getOverloadSelectionInfo

      public OverloadSelectionResult getOverloadSelectionInfo()
      Description copied from interface: MethodUsage
      Returns information about the overload selection for this call. Be aware, that selection might have failed (OverloadSelectionResult.isFailed()).
      Specified by:
      getOverloadSelectionInfo in interface MethodUsage
    • 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 interface ASTExpression
    • getConstFoldingResult

      public @NonNull ASTExpression.ConstResult getConstFoldingResult()
      Description copied from interface: ASTExpression
      Returns the result of constant folding on this expression. This may find a constant value for more than strict compile-time constants. See ASTExpression.ConstResult.
      Specified by:
      getConstFoldingResult in interface ASTExpression
    • buildConstValue

      @Deprecated protected @Nullable Object buildConstValue()
      Deprecated.
      Since 7.12.0. Kept for binary compatibility. This method should have been package-private from the start. Use ASTExpression.getConstValue() or ASTExpression.getConstFoldingResult() instead.
    • getTypeMirror

      public @NonNull JTypeMirror getTypeMirror(TypingContext context)
      Specified by:
      getTypeMirror in interface TypeNode
    • acceptVisitor

      public final <P, R> R acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor<? super P,? extends R> visitor, P data)
      Specified by:
      acceptVisitor in interface net.sourceforge.pmd.lang.ast.Node
    • addChild

      protected void addChild(net.sourceforge.pmd.lang.java.ast.AbstractJavaNode child, int index)
      Overrides:
      addChild in class net.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 class net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
    • removeChildAtIndex

      protected void removeChildAtIndex(int childIndex)
      Overrides:
      removeChildAtIndex in class net.sourceforge.pmd.lang.ast.impl.AbstractNode<net.sourceforge.pmd.lang.java.ast.AbstractJavaNode,JavaNode>
    • setImage

      protected void setImage(String image)
      Overrides:
      setImage in class net.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 class net.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 class net.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 class net.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 class net.sourceforge.pmd.lang.ast.impl.AbstractNode<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 interface JavaNode
    • 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 interface JavaNode
    • getRoot

      public final @NonNull ASTCompilationUnit getRoot()
      Specified by:
      getRoot in interface JavaNode
      Specified by:
      getRoot in interface net.sourceforge.pmd.lang.ast.Node
    • getXPathNodeName

      public final String getXPathNodeName()
      Specified by:
      getXPathNodeName in interface net.sourceforge.pmd.lang.ast.Node