Check (PsiExpression condition, Check check) { while (true) { if (condition == null) { return Check.NEITHER; } else if (check != Check.CLASS_EQUALITY && isInstanceofExpression(condition)) { return Check.INSTANCEOF; } else if (condition instanceof PsiPolyadicExpression polyadicExpression) { if (check != Check.INSTANCEOF && isClassEqualityExpression(condition)) { return Check.CLASS_EQUALITY; } final PsiExpression[] operands = polyadicExpression.getOperands(); for (PsiExpression operand : operands) { final Check chainCheck = chainCheck(operand, check); if (chainCheck != Check.NEITHER) { return chainCheck; } } return Check.NEITHER; } else if (condition instanceof PsiParenthesizedExpression parenthesizedExpression) { condition = parenthesizedExpression.getExpression(); continue; } else if (condition instanceof PsiUnaryExpression unaryOperation) { condition = unaryOperation.getOperand(); continue; } return Check.NEITHER; } }