PsiElement (@NotNull PsiElement parent) { boolean negated = false; for (PsiElement nextParent = parent.getParent(); ; parent = nextParent, nextParent = parent.getParent()) { if (nextParent instanceof PsiParenthesizedExpression) continue; if (nextParent instanceof PsiForeachStatementBase || nextParent instanceof PsiConditionalExpression && parent == ((PsiConditionalExpression)nextParent).getCondition()) { return nextParent; } if (nextParent instanceof PsiPrefixExpression && ((PsiPrefixExpression)nextParent).getOperationTokenType().equals(JavaTokenType.EXCL)) { negated = !negated; continue; } if (nextParent instanceof PsiPolyadicExpression) { IElementType tokenType = ((PsiPolyadicExpression)nextParent).getOperationTokenType(); if (tokenType.equals(JavaTokenType.ANDAND) && !negated || tokenType.equals(JavaTokenType.OROR) && negated) continue; } if (nextParent instanceof PsiIfStatement) { while (nextParent.getParent() instanceof PsiLabeledStatement) { nextParent = nextParent.getParent(); } return nextParent.getParent(); } if (nextParent instanceof PsiConditionalLoopStatement) { if (!negated) return nextParent; while (nextParent.getParent() instanceof PsiLabeledStatement) { nextParent = nextParent.getParent(); } return nextParent.getParent(); } if (nextParent instanceof PsiSwitchLabelStatementBase) { while (nextParent.getParent() instanceof PsiLabeledStatement) { nextParent = nextParent.getParent(); } return nextParent.getParent(); } if (nextParent instanceof PsiPattern || nextParent instanceof PsiCaseLabelElementList || (parent instanceof PsiPattern && nextParent instanceof PsiInstanceOfExpression) || (parent instanceof PsiPattern && nextParent instanceof PsiDeconstructionList)) { continue; } return parent; } }