return new ForStatementContext((ForStmt) node, typeSolver); } else if (node instanceof LambdaExpr) { return new LambdaExprContext((LambdaExpr) node, typeSolver); } else if (node instanceof MethodDeclaration) { return new MethodContext((MethodDeclaration) node, typeSolver);
return new ForStatementContext((ForStmt) node, typeSolver); } else if (node instanceof LambdaExpr) { return new LambdaExprContext((LambdaExpr) node, typeSolver); } else if (node instanceof MethodDeclaration) { return new MethodContext((MethodDeclaration) node, typeSolver);
return new ForStatementContext((ForStmt) node, typeSolver); } else if (node instanceof LambdaExpr) { return new LambdaExprContext((LambdaExpr) node, typeSolver); } else if (node instanceof MethodDeclaration) { return new MethodContext((MethodDeclaration) node, typeSolver);
@Test public void solveParameterOfLambdaInMethodCallExpr() throws ParseException { CompilationUnit cu = parseSample("Lambda"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Agenda"); MethodDeclaration method = Navigator.demandMethod(clazz, "lambdaMap"); ReturnStmt returnStmt = Navigator.findReturnStmt(method); MethodCallExpr methodCallExpr = (MethodCallExpr) returnStmt.getExpression().get(); LambdaExpr lambdaExpr = (LambdaExpr) methodCallExpr.getArguments().get(0); Context context = new LambdaExprContext(lambdaExpr, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("p", typeSolver); assertTrue(ref.isPresent()); assertEquals("? super java.lang.String", ref.get().getType().describe()); }
@Test public void solveParameterOfLambdaInFieldDecl() throws ParseException { CompilationUnit cu = parseSample("Lambda"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Agenda"); VariableDeclarator field = Navigator.demandField(clazz, "functional"); LambdaExpr lambdaExpr = (LambdaExpr) field.getInitializer().get(); File src = new File("src/test/resources"); CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver(); combinedTypeSolver.add(new ReflectionTypeSolver()); combinedTypeSolver.add(new JavaParserTypeSolver(adaptPath(src))); Context context = new LambdaExprContext(lambdaExpr, combinedTypeSolver); Optional<Value> ref = context.solveSymbolAsValue("p", typeSolver); assertTrue(ref.isPresent()); assertEquals("java.lang.String", ref.get().getType().describe()); }
@Test public void solveParameterOfLambdaInVarDecl() throws ParseException { CompilationUnit cu = parseSample("Lambda"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Agenda"); MethodDeclaration method = Navigator.demandMethod(clazz, "testFunctionalVar"); VariableDeclarator varDecl = Navigator.demandVariableDeclaration(method, "a"); LambdaExpr lambdaExpr = (LambdaExpr) varDecl.getInitializer().get(); File src = adaptPath(new File("src/test/resources")); CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver(); combinedTypeSolver.add(new ReflectionTypeSolver()); combinedTypeSolver.add(new JavaParserTypeSolver(src)); Context context = new LambdaExprContext(lambdaExpr, combinedTypeSolver); Optional<Value> ref = context.solveSymbolAsValue("p", typeSolver); assertTrue(ref.isPresent()); assertEquals("java.lang.String", ref.get().getType().describe()); } }