static <T extends EliminableExpression> T createExpression(@NotNull PsiParenthesizedExpression parenthesized,
                                                             @NotNull BiFunction<? super PsiPolyadicExpression, ? super PsiExpression, T> ctor,
                                                             @NotNull Map<IElementType, IElementType[]> outerOperators) {
    PsiPolyadicExpression innerExpr = getInnerExpression(parenthesized, outerOperators.keySet());
    if (innerExpr == null) return null;
    PsiExpression operand = skipPrefixedExprUp(parenthesized);
    if (operand == null) return null;
    PsiPolyadicExpression outerExpr = getOuterExpression(innerExpr, operand, outerOperators);
    if (outerExpr == null && !(operand instanceof PsiPrefixExpression)) return null;
    if (SideEffectChecker.mayHaveSideEffects(outerExpr == null ? operand : outerExpr)) return null;
    return ctor.apply(outerExpr, operand);
  }
static <T extends EliminableExpression> T createExpression(@NotNull PsiParenthesizedExpression parenthesized,
                                                             @NotNull BiFunction<? super PsiPolyadicExpression, ? super PsiExpression, T> ctor,
                                                             @NotNull Map<IElementType, IElementType[]> outerOperators)