Class TypeExtractor

  • All Implemented Interfaces:
    com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>

    public class TypeExtractor
    extends DefaultVisitorAdapter
    • Constructor Summary

      Constructors 
      Constructor Description
      TypeExtractor​(com.github.javaparser.resolution.TypeSolver typeSolver, JavaParserFacade facade)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected com.github.javaparser.resolution.Solver createSolver()  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.FieldDeclaration node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.Parameter node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.VariableDeclarator node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayAccessExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayCreationExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayInitializerExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.AssignExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.BinaryExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.BooleanLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.CastExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.CharLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ClassExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ConditionalExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.DoubleLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.EnclosedExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.FieldAccessExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.InstanceOfExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.IntegerLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.LambdaExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.LongLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.MethodCallExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.MethodReferenceExpr node, java.lang.Boolean solveLambdas)
      Returns the resolved type of a method or constructor reference expression.
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.NameExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.NullLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ObjectCreationExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.StringLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.SuperExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.SwitchExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.TextBlockLiteralExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ThisExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.TypeExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.UnaryExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.VariableDeclarationExpr node, java.lang.Boolean solveLambdas)  
      com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.stmt.ExpressionStmt node, java.lang.Boolean solveLambdas)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • TypeExtractor

        public TypeExtractor​(com.github.javaparser.resolution.TypeSolver typeSolver,
                             JavaParserFacade facade)
    • Method Detail

      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.VariableDeclarator node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.Parameter node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayAccessExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayCreationExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ArrayInitializerExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.AssignExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.BinaryExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.CastExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ClassExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ConditionalExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.EnclosedExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.FieldAccessExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.InstanceOfExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.StringLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.TextBlockLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.IntegerLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.LongLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.CharLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.DoubleLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.BooleanLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.NullLiteralExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.MethodCallExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.NameExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.TypeExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.SwitchExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.stmt.ExpressionStmt node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ObjectCreationExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.ThisExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.SuperExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.UnaryExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.VariableDeclarationExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.LambdaExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.expr.MethodReferenceExpr node,
                                                                         java.lang.Boolean solveLambdas)
        Returns the resolved type of a method or constructor reference expression.

        Per JLS §15.13, a method/constructor reference is a poly expression: its type is the functional interface it satisfies in context, not a standalone type. The result therefore depends on where the reference appears:

        • Argument to a method call – the formal parameter type of the enclosing call at the reference's position (e.g. Function<String,String> for String::new passed where a Function is expected). When solveLambdas=true, the type is further refined via InferenceContext using the functional method's return type.
        • Variable initializer – the declared type of the variable.
        • Assignment target – the type of the left-hand side expression.

        Constructor references (::new)

        Constructor references were previously short-circuited to return the constructed type directly (e.g. String for String::new). This was wrong: the constructed type is the return type of the referenced constructor, not the type of the reference expression itself. Constructor references now fall through to the same context-based logic used for ordinary method references.

        One special case remains: when solveLambdas=true, the inference step that calls JavaParserFacade.toMethodUsage(com.github.javaparser.ast.expr.MethodReferenceExpr, java.util.List<com.github.javaparser.resolution.types.ResolvedType>) to obtain the actual return type of the referenced callable is skipped for ::new. toMethodUsage looks up methods by name via getAllMethods(), which never contains constructors. Skipping is safe because a constructor always returns the constructed type, which equals the functional interface's return type — so the inference pair (formal, actual) would carry no new information.

        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
        Parameters:
        node - the method/constructor reference expression to type-check
        solveLambdas - when true, perform full inference; when false, return the raw formal parameter type from the enclosing declaration
        Returns:
        the resolved type of the reference expression in its context
        Throws:
        com.github.javaparser.resolution.UnsolvedSymbolException - if the enclosing method call cannot be resolved
        java.lang.UnsupportedOperationException - if the reference appears in an unsupported context
      • visit

        public com.github.javaparser.resolution.types.ResolvedType visit​(com.github.javaparser.ast.body.FieldDeclaration node,
                                                                         java.lang.Boolean solveLambdas)
        Specified by:
        visit in interface com.github.javaparser.ast.visitor.GenericVisitor<com.github.javaparser.resolution.types.ResolvedType,​java.lang.Boolean>
        Overrides:
        visit in class DefaultVisitorAdapter
      • createSolver

        protected com.github.javaparser.resolution.Solver createSolver()