boolean (PsiStatement statement) { PsiStatement nextStatement = PsiTreeUtil.getNextSiblingOfType(statement, PsiStatement.class); if (nextStatement != null) { return !(nextStatement instanceof PsiSwitchLabelStatement); } PsiElement parent = statement.getParent(); if (parent instanceof PsiIfStatement ifStatement) { PsiStatement thenBranch = ifStatement.getThenBranch(); PsiStatement elseBranch = ifStatement.getElseBranch(); if (thenBranch == statement && ControlFlowUtils.statementMayCompleteNormally(elseBranch) || elseBranch == statement && ControlFlowUtils.statementMayCompleteNormally(thenBranch)) { return false; } return nextStatementMayBecomeUnreachable(ifStatement); } if (parent instanceof PsiLabeledStatement labeledStatement) { return nextStatementMayBecomeUnreachable(labeledStatement); } if (parent instanceof PsiCodeBlock) { PsiStatement parentStatement = ObjectUtils.tryCast(parent.getParent(), PsiStatement.class); if (parentStatement instanceof PsiBlockStatement || parentStatement instanceof PsiSynchronizedStatement || parentStatement instanceof PsiTryStatement || // TODO handle try-catch more accurately parentStatement instanceof PsiSwitchStatement) { return nextStatementMayBecomeUnreachable(parentStatement); } } return false; }