boolean (@NotNull PsiElement element, int offset) { final PsiIfStatement ifStatement = PsiTreeUtil.getParentOfType(element, PsiIfStatement.class); if (ifStatement == null) return false; final PsiExpression condition = ifStatement.getCondition(); if (condition == null) return false; if (ifStatement.getThenBranch() == null) return false; if (SyntaxTraverser.psiTraverser(condition) .filter(PsiPrefixExpression.class) .filter(prefixExpr -> PsiUtil.skipParenthesizedExprDown(prefixExpr.getOperand()) == null) .first() != null) return false; if (element instanceof PsiKeyword) { if (element.getParent() != ifStatement) { return false; } final IElementType tokenType = ((PsiKeyword)element).getTokenType(); if (tokenType != JavaTokenType.IF_KEYWORD && tokenType != JavaTokenType.ELSE_KEYWORD) { return false; } } else { final TextRange condTextRange = condition.getTextRange(); if (condTextRange == null || !condTextRange.contains(offset)) { return false; } } PsiElement block = findCodeBlock(ifStatement); if (block == null) { return false; } if (PsiUtil.skipParenthesizedExprDown(ifStatement.getCondition()) == null) { return true; } // check that the code structure isn't broken completely ControlFlow localFlow = buildControlFlow(block); int startThenOffset = getThenOffset(localFlow, ifStatement); int afterIfOffset = localFlow.getEndOffset(ifStatement); return startThenOffset >= 0 && afterIfOffset >= 0; }