@Override public void visit(ExpressionStmt n, Void arg) { out.println("ExpressionStmt: " + (extended ? n : n.getExpression())); super.visit(n, arg); }
@Override public boolean doIsEquals(ExpressionStmt first, ExpressionStmt second) { if(!isEqualsUseMerger(first.getExpression(),second.getExpression())) return false; return true; } }
private List<VariableDeclarator> localVariablesDeclaredIn(Statement statement) { if (statement instanceof ExpressionStmt) { ExpressionStmt expressionStmt = (ExpressionStmt)statement; if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr variableDeclarationExpr = (VariableDeclarationExpr)expressionStmt.getExpression(); List<VariableDeclarator> variableDeclarators = new LinkedList<>(); variableDeclarators.addAll(variableDeclarationExpr.getVariables()); return variableDeclarators; } } return Collections.emptyList(); } }
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
@Override public ExpressionStmt doMerge(ExpressionStmt first, ExpressionStmt second) { ExpressionStmt es = new ExpressionStmt(); es.setExpression(mergeSingle(first.getExpression(),second.getExpression())); return es; }
private Expression getExpressionFromStmt(Statement stmt) { stmt = getStmtFromStmt(stmt); if (stmt instanceof ExpressionStmt) { return getUnenclosedExpr(((ExpressionStmt)stmt).getExpression()); } return null; }
@Test public void issue257() throws FileNotFoundException { String pathToSourceFile = adaptPath("src/test/resources/issue257/A.java.txt"); CompilationUnit cu = JavaParser.parse(new File(pathToSourceFile)); Statement statement = cu.getClassByName("A").get().getMethodsByName("run").get(0).getBody().get().getStatement(0); ExpressionStmt expressionStmt = (ExpressionStmt)statement; Expression expression = expressionStmt.getExpression(); JavaParserFacade.get(typeSolver).getType(expression); }
@Test(expected = UnsolvedSymbolException.class) public void issue144() throws ParseException { CompilationUnit cu = parseSampleWithStandardExtension("issue144/HelloWorld"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "HelloWorld"); ExpressionStmt expressionStmt = (ExpressionStmt)clazz.getMethodsByName("main").get(0).getBody().get().getStatement(0); MethodCallExpr methodCallExpr = (MethodCallExpr) expressionStmt.getExpression(); Expression firstParameter = methodCallExpr.getArgument(0); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); javaParserFacade.solve(firstParameter).isSolved(); }
@Test public void loopOnStaticallyImportedType() throws ParseException { CompilationUnit cu = parseSampleWithStandardExtension("issue128/foo/Issue128"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "JavaTest"); ExpressionStmt expressionStmt = (ExpressionStmt)clazz.getMethodsByName("test").get(0).getBody().get().getStatement(0); MethodCallExpr methodCallExpr = (MethodCallExpr) expressionStmt.getExpression(); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); assertEquals(false, javaParserFacade.solve(methodCallExpr).isSolved()); } }
@Test public void issue144WithReflectionTypeSolver() throws ParseException { CompilationUnit cu = parseSampleWithStandardExtension("issue144/HelloWorld"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "HelloWorld"); ExpressionStmt expressionStmt = (ExpressionStmt)clazz.getMethodsByName("main").get(0).getBody().get().getStatement(0); MethodCallExpr methodCallExpr = (MethodCallExpr) expressionStmt.getExpression(); Expression firstParameter = methodCallExpr.getArgument(0); JavaParserFacade javaParserFacade = JavaParserFacade.get(new ReflectionTypeSolver(true)); assertEquals(true, javaParserFacade.solve(firstParameter).isSolved()); }
@Test public void issue144WithCombinedTypeSolver() throws ParseException { CompilationUnit cu = parseSampleWithStandardExtension("issue144/HelloWorld"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "HelloWorld"); ExpressionStmt expressionStmt = (ExpressionStmt)clazz.getMethodsByName("main").get(0).getBody().get().getStatement(0); MethodCallExpr methodCallExpr = (MethodCallExpr) expressionStmt.getExpression(); Expression firstParameter = methodCallExpr.getArgument(0); JavaParserFacade javaParserFacade = JavaParserFacade.get(new CombinedTypeSolver(typeSolver, new ReflectionTypeSolver(true))); assertEquals(true, javaParserFacade.solve(firstParameter).isSolved()); } }
@Test public void testSolveStaticallyImportedMemberType() throws ParseException { CompilationUnit cu = parseSample("Issue251"); ClassOrInterfaceDeclaration cls = Navigator.demandClassOrInterface(cu, "Main"); TypeSolver typeSolver = new ReflectionTypeSolver(); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); MethodDeclaration m = Navigator.demandMethod(cls, "bar"); ExpressionStmt stmt = (ExpressionStmt) m.getBody().get().getStatements().get(1); MethodCallExpr expression = (MethodCallExpr) stmt.getExpression(); Assert.assertNotNull(javaParserFacade.solve(expression)); } }
@Test public void issue235() throws ParseException { CompilationUnit cu = parseSample("Issue235"); ClassOrInterfaceDeclaration cls = Navigator.demandClassOrInterface(cu, "Foo"); TypeSolver typeSolver = new ReflectionTypeSolver(); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); MethodDeclaration m = Navigator.demandMethod(cls, this.method); ExpressionStmt stmt = (ExpressionStmt) m.getBody().get().getStatements().get(0); ObjectCreationExpr expression = (ObjectCreationExpr) stmt.getExpression(); Assert.assertNotNull(javaParserFacade.convertToUsage(expression.getType())); } }
@Test public void typeDeclarationSuperClassImplicitlyIncludeObject() throws ParseException { CompilationUnit cu = parseSample("Issue18"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Foo"); MethodDeclaration methodDeclaration = Navigator.demandMethod(clazz, "bar"); ExpressionStmt expr = (ExpressionStmt) methodDeclaration.getBody().get().getStatements().get(1); TypeSolver typeSolver = new ReflectionTypeSolver(); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); ResolvedType type = javaParserFacade.getType(expr.getExpression()); assertEquals("java.lang.Object", type.describe()); } }
@Test public void resolveUsageOfGenericFieldSimpleCase() throws ParseException { CompilationUnit cu = parseSample("Generics"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "SomeCollection"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo1"); ExpressionStmt stmt = (ExpressionStmt) method.getBody().get().getStatements().get(0); Expression expression = stmt.getExpression(); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(expression); assertEquals(false, type.isTypeVariable()); assertEquals("java.lang.String", type.describe()); }
@Test public void resolveUsageOfGenericFieldAdvancedCase() throws ParseException { CompilationUnit cu = parseSample("Generics"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "SomeCollection"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo2"); ExpressionStmt stmt = (ExpressionStmt) method.getBody().get().getStatements().get(0); Expression expression = stmt.getExpression(); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(expression); assertEquals(false, type.isTypeVariable()); assertEquals("java.util.List<java.lang.String>", type.describe()); assertEquals(1, type.asReferenceType().typeParametersValues().size()); assertEquals(false, type.asReferenceType().typeParametersValues().get(0).isTypeVariable()); assertEquals("java.lang.String", type.asReferenceType().typeParametersValues().get(0).describe()); }
@Test public void resolveInheritedFieldReference() throws ParseException { CompilationUnit cu = parseSample("ReferencesToField"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "ReferencesToFieldExtendingClass"); MethodDeclaration method1 = Navigator.demandMethod(referencesToField, "method2"); ExpressionStmt stmt = (ExpressionStmt) method1.getBody().get().getStatements().get(0); AssignExpr assignExpr = (AssignExpr) stmt.getExpression(); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); SymbolReference symbolReference = symbolSolver.solveSymbol("i", assignExpr.getTarget()); assertEquals(true, symbolReference.isSolved()); assertEquals("i", symbolReference.getCorrespondingDeclaration().getName()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isField()); }
@Test public void resolveDeclaredFieldReference() throws ParseException { CompilationUnit cu = parseSample("ReferencesToField"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "ReferencesToField"); MethodDeclaration method1 = Navigator.demandMethod(referencesToField, "method1"); ExpressionStmt stmt = (ExpressionStmt) method1.getBody().get().getStatements().get(0); AssignExpr assignExpr = (AssignExpr) stmt.getExpression(); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); SymbolReference symbolReference = symbolSolver.solveSymbol("i", assignExpr.getTarget()); assertEquals(true, symbolReference.isSolved()); assertEquals("i", symbolReference.getCorrespondingDeclaration().getName()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isField()); }