private TryCatchStatement createCleanupTryCatch(CleanupBlock block, VariableExpression featureThrowableVar) { List<Statement> cleanupStats = new ArrayList<>(block.getAst()); TryCatchStatement tryCatchStat = new TryCatchStatement( new BlockStatement(cleanupStats, new VariableScope()), EmptyStatement.INSTANCE); tryCatchStat.addCatch(createHandleSuppressedThrowableStatement(featureThrowableVar)); return tryCatchStat; }
missesReturn[0] = true; }).addReturnsIfNeeded(trys.getFinallyStatement(), scope); boolean hasFinally = !(trys.getFinallyStatement() instanceof EmptyStatement); final Statement tryStatement = addReturnsIfNeeded(trys.getTryStatement(), scope); if (doAdd) trys.setTryStatement(tryStatement); final int len = trys.getCatchStatements().size(); for (int i = 0; i != len; ++i) { final CatchStatement catchStatement = trys.getCatchStatement(i); final Statement code = addReturnsIfNeeded(catchStatement.getCode(), scope); if (doAdd) catchStatement.setCode(code);
@SuppressWarnings("unchecked") @Override public void visitTryCatchFinally(TryCatchStatement stat) { stat.setTryStatement(replace(stat.getTryStatement())); replaceAll(stat.getCatchStatements()); stat.setFinallyStatement(replace(stat.getFinallyStatement())); }
public void visitTryCatchFinally(TryCatchStatement statement) { statement.getTryStatement().visit(this); for (CatchStatement catchStatement : statement.getCatchStatements()) { catchStatement.visit(this); } Statement finallyStatement = statement.getFinallyStatement(); if (finallyStatement instanceof EmptyStatement) { // dispatching to EmptyStatement will not call back visitor, // must call our visitEmptyStatement explicitly visitEmptyStatement((EmptyStatement) finallyStatement); } else { finallyStatement.visit(this); } }
new TryCatchStatement( new BlockStatement(allStats, new VariableScope()), new ExpressionStatement(
tryBlock.addStatement(methodBody); final TryCatchStatement tryCatchStatement = new TryCatchStatement(tryBlock, new EmptyStatement()); tryCatchStatement.addCatch(catchStatement); blockToRemoveAttribute.addStatement(ifAttributeValueMatchesMethodName); final TryCatchStatement tryCatchToRemoveAttribute = new TryCatchStatement(blockToRemoveAttribute, new EmptyStatement()); tryCatchToRemoveAttribute.addCatch(new CatchStatement(new Parameter(ClassHelper.make(Exception.class), "$exceptionRemovingAttribute"), new EmptyStatement())); tryCatchStatement.setFinallyStatement(tryCatchToRemoveAttribute);
/** * Returns the created {@link TryCatchStatement} instance. At * least the "try" statement and the "finally" statement must be * provided. Otherwise it will throw a {@link * IllegalStateException} * * @return a {@link TryCatchStatement} instance * @throws IllegalStateException if neither try nor finally statements are provided * @since 0.2.3 */ public TryCatchStatement build() { if (tryStatement == null || finallyStatement == null) { throw new IllegalStateException("Both try statement and finally statement must be provided"); } final TryCatchStatement tryCatchStmt = new TryCatchStatement(tryStatement, finallyStatement); if (!catchStatements.isEmpty()) { tryCatchStmt .getCatchStatements() .addAll(catchStatements); } return tryCatchStmt; } }
@Override public void visitTryCatchFinally(final TryCatchStatement statement) { final List<CatchStatement> catchStatements = statement.getCatchStatements(); for (CatchStatement catchStatement : catchStatements) { ClassNode exceptionType = catchStatement.getExceptionType(); typeCheckingContext.controlStructureVariables.put(catchStatement.getVariable(), exceptionType); } try { super.visitTryCatchFinally(statement); } finally { for (CatchStatement catchStatement : catchStatements) { typeCheckingContext.controlStructureVariables.remove(catchStatement.getVariable()); } } }
public void visitTryCatchFinally(final TryCatchStatement statement) { assertStatementAuthorized(statement); statement.getTryStatement().visit(this); for (CatchStatement catchStatement : statement.getCatchStatements()) { catchStatement.visit(this); } Statement finallyStatement = statement.getFinallyStatement(); if (finallyStatement instanceof EmptyStatement) { // dispatching to EmptyStatement will not call back visitor, // must call our visitEmptyStatement explicitly visitEmptyStatement((EmptyStatement) finallyStatement); } else { finallyStatement.visit(this); } }
new TryCatchStatement(originalCode, stmt(releaseLock))));
visitStatement(statement); CatchStatement catchStatement = statement.getCatchStatement(0); Statement tryStatement = statement.getTryStatement(); final Statement finallyStatement = statement.getFinallyStatement(); mv.visitLabel(tryEnd); for (Iterator it = statement.getCatchStatements().iterator(); it.hasNext();) { catchStatement = (CatchStatement) it.next(); ClassNode exceptionType = catchStatement.getExceptionType();
Map<Variable, VariableState> beforeTryState = new HashMap<Variable, VariableState>(getState()); pushState(); Statement tryStatement = statement.getTryStatement(); tryStatement.visit(this); Map<Variable, VariableState> afterTryState = new HashMap<Variable, VariableState>(getState()); Statement finallyStatement = statement.getFinallyStatement(); List<Map<Variable, VariableState>> afterStates = new ArrayList<>(); if (statement.getCatchStatements().isEmpty()) { visitPossiblyEmptyStatement(finallyStatement); if (!returningBlock(tryStatement)) { for (CatchStatement catchStatement : statement.getCatchStatements()) {
@Override @SuppressWarnings("unchecked") public void visitTryCatchFinally(TryCatchStatement stat) { stat.setTryStatement(replace(stat.getTryStatement())); replaceAll(stat.getCatchStatements()); stat.setFinallyStatement(replace(stat.getFinallyStatement())); }
private TryCatchStatement tryCatchAssertionFailedError(AnnotationNode annotationNode, MethodNode methodNode, ArrayList<Statement> statements) { TryCatchStatement tryCatchStatement = new TryCatchStatement(new BlockStatement(statements, methodNode.getVariableScope()), EmptyStatement.INSTANCE); tryCatchStatement.addCatch(new CatchStatement(new Parameter(CATCHED_THROWABLE_TYPE, "ex"), ReturnStatement.RETURN_NULL_OR_VOID)); return tryCatchStatement; }
Statement code = ex.getCode(); code = createImplicitReturn(code); ex.setCode(new BlockStatement(new Statement[] {startStats,new TryCatchStatement(code,endStats)},ex.getVariableScope()));
visitStatement(statement); CatchStatement catchStatement = statement.getCatchStatement(0); Statement tryStatement = statement.getTryStatement(); final Statement finallyStatement = statement.getFinallyStatement(); mv.visitLabel(tryEnd); for (Iterator it = statement.getCatchStatements().iterator(); it.hasNext();) { catchStatement = (CatchStatement) it.next(); ClassNode exceptionType = catchStatement.getExceptionType();
OperandStack operandStack = controller.getOperandStack(); Statement tryStatement = statement.getTryStatement(); final Statement finallyStatement = statement.getFinallyStatement(); for (CatchStatement catchStatement : statement.getCatchStatements()) { ClassNode exceptionType = catchStatement.getExceptionType(); String exceptionTypeInternalName = BytecodeHelper.getClassInternalName(exceptionType);
@SuppressWarnings("unchecked") @Override public void visitTryCatchFinally(TryCatchStatement stat) { stat.setTryStatement(replace(stat.getTryStatement())); replaceAll(stat.getCatchStatements()); stat.setFinallyStatement(replace(stat.getFinallyStatement())); }
protected Statement tryStatement(AST tryStatementNode) { AST tryNode = tryStatementNode.getFirstChild(); Statement tryStatement = statement(tryNode); Statement finallyStatement = EmptyStatement.INSTANCE; AST node = tryNode.getNextSibling(); // let's do the catch nodes List<CatchStatement> catches = new ArrayList<CatchStatement>(); for (; isType(LITERAL_catch, node); node = node.getNextSibling()) { final List<CatchStatement> catchStatements = catchStatement(node); catches.addAll(catchStatements); } if (isType(LITERAL_finally, node)) { finallyStatement = statement(node); node = node.getNextSibling(); } if (finallyStatement instanceof EmptyStatement && catches.isEmpty()) { throw new ASTRuntimeException(tryStatementNode, "A try statement must have at least one catch or finally block."); } TryCatchStatement tryCatchStatement = new TryCatchStatement(tryStatement, finallyStatement); configureAST(tryCatchStatement, tryStatementNode); for (CatchStatement statement : catches) { tryCatchStatement.addCatch(statement); } return tryCatchStatement; }
Statement code = ex.getCode(); code = createImplicitReturn(code); ex.setCode(new BlockStatement(new Statement[] {startStats,new TryCatchStatement(code,endStats)},ex.getVariableScope()));