boolean (@NotNull PsiIfStatement ifStatement, @NotNull List<PsiStatement> statements) { PsiStatement lastStatement = statements.get(statements.size() - 1); List<PsiElement> afterLast = new ArrayList<>(); for (PsiElement e = lastStatement.getNextSibling(); e != null; e = e.getNextSibling()) { if (!(e instanceof PsiComment) && !(e instanceof PsiWhiteSpace)) { afterLast.add(e); } } PsiStatement thenBranch = ifStatement.getThenBranch(); PsiStatement elseBranch = ifStatement.getElseBranch(); if (!ControlFlowUtils.statementMayCompleteNormally(thenBranch) || !ControlFlowUtils.statementMayCompleteNormally(elseBranch)) { return true; } List<String> declaredInIf = StreamEx.of(thenBranch, elseBranch).flatArray(ControlFlowUtils::unwrapBlock) .select(PsiDeclarationStatement.class).flatArray(PsiDeclarationStatement::getDeclaredElements) .select(PsiNamedElement.class).map(PsiNamedElement::getName).nonNull().toList(); if (afterLast.isEmpty() && declaredInIf.isEmpty()) return false; Set<PsiVariable> declared = StreamEx.of(statements).flatCollection(VariableAccessUtils::findDeclaredVariables).toSet(); if (declared.isEmpty()) return false; if (SyntaxTraverser.psiTraverser().withRoots(afterLast).filter(PsiJavaCodeReferenceElement.class) .filter(ref -> declared.contains(ref.resolve())).first() != null) { return true; } return ContainerUtil.exists(declaredInIf, name -> ContainerUtil.exists(declared, d -> name.equals(d.getName()))); }