private static int constructExpressionText(@NotNull StringBuilder sb,
                                               @NotNull PsiPolyadicExpression expression,
                                               int operandIdx,
                                               @Nullable PsiExpression stopAt) {
      PsiExpression[] operands = expression.getOperands();
      for (; operandIdx < operands.length; operandIdx++) {
        PsiExpression operand = operands[operandIdx];
        PsiJavaToken beforeOperand = expression.getTokenBeforeOperand(operand);
        if (beforeOperand != null) sb.append(beforeOperand.getText());
        if (operand == stopAt) break;
        PsiPolyadicExpression polyadic = ObjectUtils.tryCast(operand, PsiPolyadicExpression.class);
        if (polyadic != null) {
          constructExpressionText(sb, polyadic, 0, null);
          continue;
        }
        EliminateUtils.processPrefixed(operand, false, (op, isOpNegated) -> sb.append(op.getText()));
      }

      return operandIdx;
    }
private static int constructExpressionText(@NotNull StringBuilder sb,
                                               @NotNull PsiPolyadicExpression expression,
                                               int operandIdx,
                                               @Nullable PsiExpression stopAt)