private boolean lastStmtIsThrowOrReturn(Statement stmt) { final List<Statement> stmts = asList(stmt); if (stmts.isEmpty()) { return false; } final Statement lastStmt = stmts.get(stmts.size() - 1); switch (lastStmt.getNodeType()) { case RETURN_STATEMENT: case THROW_STATEMENT: return true; case IF_STATEMENT: final IfStatement ifStmt = (IfStatement) lastStmt; final Statement thenStmt = ifStmt.getThenStatement(); final Statement elseStmt = ifStmt.getElseStatement(); return lastStmtIsThrowOrReturn(thenStmt) && (elseStmt == null || lastStmtIsThrowOrReturn(elseStmt)); default: return false; } }