void (@NotNull PsiBinaryExpression disjunction) { super.visitBinaryExpression(disjunction); if (!JavaTokenType.OROR.equals(disjunction.getOperationTokenType())) return; PsiPolyadicExpression conjunction = tryCast(PsiUtil.skipParenthesizedExprDown(disjunction.getLOperand()), PsiPolyadicExpression.class); if (conjunction == null || !JavaTokenType.ANDAND.equals(conjunction.getOperationTokenType())) return; final PsiExpression rightDisjunct = PsiUtil.skipParenthesizedExprDown(disjunction.getROperand()); if (hasOperand(conjunction, rightDisjunct) && !SideEffectChecker.mayHaveSideEffects(conjunction)) { registerError(disjunction, disjunction); } PsiExpression[] operands = conjunction.getOperands(); if (operands.length >= 2 && (BoolUtils.areExpressionsOpposite(operands[0], rightDisjunct) || BoolUtils.areExpressionsOpposite(operands[operands.length - 1], rightDisjunct)) && !SideEffectChecker.mayHaveSideEffects(rightDisjunct)) { registerError(disjunction, disjunction); } }