@NotNull
  private static Pair<@NotNull PsiExpression, @NotNull PsiExpression> getPolyadicDiff(@NotNull final PsiPolyadicExpression from,
                                                                                      @NotNull final PsiPolyadicExpression to) {
    final EquivalenceChecker eq = EquivalenceChecker.getCanonicalPsiEquivalence();
    final EquivalenceChecker.Match match = eq.expressionsMatch(from, to);
    if (match.isPartialMatch()) {
      final PsiExpression leftDiff = PsiUtil.skipParenthesizedExprDown((PsiExpression)match.getLeftDiff());
      final PsiExpression rightDiff = PsiUtil.skipParenthesizedExprDown((PsiExpression)match.getRightDiff());

      if (leftDiff == null || rightDiff == null) return Pair.create(from, to);

      final PsiPolyadicExpression leftParent = PsiTreeUtil.getParentOfType(leftDiff, PsiPolyadicExpression.class);
      assert leftParent != null;

      final IElementType op = leftParent.getOperationTokenType();
      if (op == JavaTokenType.MINUS || op == JavaTokenType.PLUS) {
        if (shouldBeInverted(leftDiff, from)) return Pair.create(rightDiff, leftDiff);
        else return Pair.create(leftDiff, rightDiff);
      }
    }
    return Pair.create(from, to);
  }
@NotNull
  private static Pair<@NotNull PsiExpression, @NotNull PsiExpression> getPolyadicDiff(@NotNull final PsiPolyadicExpression from,
                                                                                      @NotNull final PsiPolyadicExpression to)