@Override public List<VariableDeclarator> localVariablesExposedToChild(Node child) { int position = -1; for (int i = 0; i < wrappedNode.getStatements().size(); i++) { if (wrappedNode.getStatements().get(i).equals(child)) { position = i; } } if (position == -1) { throw new RuntimeException(); } List<VariableDeclarator> variableDeclarators = new LinkedList<>(); for (int i = position - 1; i >= 0; i--) { variableDeclarators.addAll(localVariablesDeclaredIn(wrappedNode.getStatement(i))); } return variableDeclarators; }
@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); }
@Override public Boolean visit(BlockStmt n, Void arg) { // An empty block that is not a switch block can complete normally iff it is reachable if (n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return isReachable(statement); } // A non-empty block that is not a switch block can complete normally iff the last statement in // it can complete normally. if (!n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return canCompleteNormally(n.getStatement(n.getStatements().size() - 1)); } throw new UnsupportedOperationException(); }
@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(); }
@Override public Boolean visit(BlockStmt n, Void arg) { // An empty block that is not a switch block can complete normally iff it is reachable if (n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return isReachable(statement); } // A non-empty block that is not a switch block can complete normally iff the last statement in // it can complete normally. if (!n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return canCompleteNormally(n.getStatement(n.getStatements().size() - 1)); } throw new UnsupportedOperationException(); }
@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()); } }
@Override public Boolean visit(BlockStmt n, Void arg) { // An empty block that is not a switch block can complete normally iff it is reachable if (n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return isReachable(statement); } // A non-empty block that is not a switch block can complete normally iff the last statement in // it can complete normally. if (!n.isEmpty() && !parentIs(statement, SwitchStmt.class)) { return canCompleteNormally(n.getStatement(n.getStatements().size() - 1)); } throw new UnsupportedOperationException(); }
@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()); } }