@Override public TryStmt doMerge(TryStmt first, TryStmt second) { TryStmt ts = new TryStmt(); ts.setResources(mergeCollectionsInOrder(first.getResources(),second.getResources())); ts.setCatchs(mergeCollectionsInOrder(first.getCatchs(),second.getCatchs())); ts.setTryBlock(mergeSingle(first.getTryBlock(),second.getTryBlock())); ts.setFinallyBlock(mergeSingle(first.getFinallyBlock(),second.getFinallyBlock())); return ts; }
@Override public boolean doIsEquals(TryStmt first, TryStmt second) { if(!isEqualsUseMerger(first.getResources(),second.getResources())) return false; if(!isEqualsUseMerger(first.getCatchs(),second.getCatchs())) return false; return true; } }
public boolean continueADoStatement(ContinueStmt continueStmt, DoStmt doStmt) { for (TryStmt tryStmt : containedTryStmts(continueStmt)) { if (contains(tryStmt.getTryBlock(), continueStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public void visit(TryStmt n, A arg) { HashSet<String> blockVariables = newHashSet(); this.localVariables.addLast(blockVariables); try { for (VariableDeclarationExpr variableDeclarationExpr : emptyIfNull(n.getResources())) { for (VariableDeclarator variableDeclarator : variableDeclarationExpr.getVars()) { blockVariables.add(variableDeclarator.getId().getName()); } } super.visit(n, arg); } finally { this.localVariables.removeLast(); } }
@Override public List<VariableDeclarator> localVariablesExposedToChild(Node child) { NodeList<Expression> resources = wrappedNode.getResources(); for (int i=0;i<resources.size();i++) { if (child == resources.get(i)) { return resources.subList(0, i).stream() .map(e -> e instanceof VariableDeclarationExpr ? ((VariableDeclarationExpr) e).getVariables() : Collections.<VariableDeclarator>emptyList()) .flatMap(List::stream) .collect(Collectors.toList()); } } if (child == wrappedNode.getTryBlock()) { List<VariableDeclarator> res = new LinkedList<>(); for (Expression expr : resources) { if (expr instanceof VariableDeclarationExpr) { res.addAll(((VariableDeclarationExpr)expr).getVariables()); } } return res; } return Collections.emptyList(); } }
migrateMethod.setBody(block); TryStmt tryStmt = new TryStmt(createStatementExecuteBlock(), null, null); tryStmt.setResources(Collections.singletonList(createAssignStatement())); ASTHelper.addStmt(block, tryStmt);
public boolean continueADoStatement(ContinueStmt continueStmt, DoStmt doStmt) { for (TryStmt tryStmt : containedTryStmts(continueStmt)) { if (contains(tryStmt.getTryBlock(), continueStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { JavaParserSymbolDeclaration decl = JavaParserSymbolDeclaration.localVar(v, typeSolver); return Optional.of(Value.from(decl)); } } } } if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlockAsValue(name, typeSolver, wrappedNode); } else { return getParent().solveSymbolAsValue(name, typeSolver); } }
public boolean continueADoStatement(ContinueStmt continueStmt, DoStmt doStmt) { for (TryStmt tryStmt : containedTryStmts(continueStmt)) { if (contains(tryStmt.getTryBlock(), continueStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { JavaParserSymbolDeclaration decl = JavaParserSymbolDeclaration.localVar(v, typeSolver); return Optional.of(Value.from(decl)); } } } } if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlockAsValue(name, typeSolver, wrappedNode); } else { return getParent().solveSymbolAsValue(name, typeSolver); } }
/** * A reachable break statement exits a statement if, within the break target, either there are no try statements * whose try blocks contain the break statement, or there are try statements whose try blocks contain the break * statement and all finally clauses of those try statements can complete normally. */ public boolean exitTheStatement(BreakStmt breakStmt) { if (!isReachable(breakStmt)) { return false; } Statement breakTarget = breakTarget(breakStmt); for (TryStmt tryStmt : containedTryStmts(breakTarget)) { if (contains(tryStmt.getTryBlock(), breakStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public Optional<Value> solveSymbolAsValue(String name) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { JavaParserSymbolDeclaration decl = JavaParserSymbolDeclaration.localVar(v, typeSolver); return Optional.of(Value.from(decl)); } } } } if (requireParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlockAsValue(name, typeSolver, wrappedNode); } else { return getParent().solveSymbolAsValue(name); } }
/** * A reachable break statement exits a statement if, within the break target, either there are no try statements * whose try blocks contain the break statement, or there are try statements whose try blocks contain the break * statement and all finally clauses of those try statements can complete normally. */ public boolean exitTheStatement(BreakStmt breakStmt) { if (!isReachable(breakStmt)) { return false; } Statement breakTarget = breakTarget(breakStmt); for (TryStmt tryStmt : containedTryStmts(breakTarget)) { if (contains(tryStmt.getTryBlock(), breakStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(v, typeSolver)); } } } } if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlock(name, typeSolver, wrappedNode); } else { return getParent().solveSymbol(name, typeSolver); } }
/** * A reachable break statement exits a statement if, within the break target, either there are no try statements * whose try blocks contain the break statement, or there are try statements whose try blocks contain the break * statement and all finally clauses of those try statements can complete normally. */ public boolean exitTheStatement(BreakStmt breakStmt) { if (!isReachable(breakStmt)) { return false; } Statement breakTarget = breakTarget(breakStmt); for (TryStmt tryStmt : containedTryStmts(breakTarget)) { if (contains(tryStmt.getTryBlock(), breakStmt)) { if (!tryStmt.getFinallyBlock().isPresent() && !canCompleteNormally(tryStmt.getFinallyBlock().get())) { return false; } } } return true; }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(v, typeSolver)); } } } } if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlock(name, typeSolver, wrappedNode); } else { return getParent().solveSymbol(name, typeSolver); } }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name) { for (Expression expr : wrappedNode.getResources()) { if (expr instanceof VariableDeclarationExpr) { for (VariableDeclarator v : ((VariableDeclarationExpr)expr).getVariables()) { if (v.getName().getIdentifier().equals(name)) { return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(v, typeSolver)); } } } } if (requireParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlock(name, typeSolver, wrappedNode); } else { return getParent().solveSymbol(name); } }
ne.getResources().contains(c2)) )) { return true; p2.getInitializer().isPresent() && p2.getInitializer().get() == c2 && whenParentIs(VariableDeclarationExpr.class, p2, (p3, c3) -> p3.getVariables().contains(c3) && whenParentIs(TryStmt.class, p3, (p4, c4) -> p4.getResources().contains(c4) ne.getResources().contains(c2))) { return true; p2.getInitializer().isPresent() && p2.getInitializer().get() == c2 && whenParentIs(VariableDeclarationExpr.class, p2, (p3, c3) -> p3.getVariables().contains(c3) && whenParentIs(TryStmt.class, p3, (p4, c4) -> p4.getResources().contains(c4)
return NameRole.REFERENCE; if (whenParentIs(TryStmt.class, name, (p, c) -> p.getResources().contains(c))) { return NameRole.REFERENCE;