protected void onChangeResolved(@NotNull TextMergeChange change) {
    if (change.isResolved()) {
      onChangeRemoved(change);
    }
    else {
      onChangeAdded(change);
    }
    if (getChangesCount() == 0 && getConflictsCount() == 0) {
      LOG.assertTrue(ContainerUtil.and(getAllChanges(), TextMergeChange::isResolved));
      ApplicationManager.getApplication().invokeLater(() -> {
        if (isDisposed()) return;

        JComponent component = getEditor().getComponent();
        RelativePoint point = new RelativePoint(component, new Point(component.getWidth() / 2, JBUIScale.scale(5)));

        String title = DiffBundle.message("merge.all.changes.processed.title.text");
        @NlsSafe String message = XmlStringUtil.wrapInHtmlTag(DiffBundle.message("merge.all.changes.processed.message.text"), "a");
        DiffBalloons.showSuccessPopup(title, message, point, this, () -> {
          if (isDisposed() || myLoadingPanel.isLoading()) return;
          doFinishMerge(MergeResult.RESOLVED, MergeResultSource.NOTIFICATION);
        });
      });
    }
  }
protected void onChangeResolved(@NotNull TextMergeChange change)