@NotNull
    @RequiresBackgroundThread
    private Runnable performRediff(@NotNull final List<? extends TextMergeChange> scheduled,
                                   @NotNull final List<? extends InnerChunkData> data,
                                   @NotNull final ProgressIndicator indicator) {
      ComparisonPolicy comparisonPolicy = myTextDiffProvider.getIgnorePolicy().getComparisonPolicy();
      final List<MergeInnerDifferences> result = new ArrayList<>(data.size());
      for (InnerChunkData chunkData : data) {
        result.add(DiffUtil.compareThreesideInner(chunkData.text, comparisonPolicy, indicator));
      }

      return () -> {
        if (!myEnabled || indicator.isCanceled()) return;
        myProgress = null;

        for (int i = 0; i < scheduled.size(); i++) {
          TextMergeChange change = scheduled.get(i);
          if (myScheduled.contains(change)) continue;
          change.setInnerFragments(result.get(i));
        }

        myStatusPanel.setBusy(false);
        if (!myScheduled.isEmpty()) {
          launchRediff(false);
        }
      };
    }
@NotNull
    @RequiresBackgroundThread
    private Runnable performRediff(@NotNull final List<? extends TextMergeChange> scheduled,
                                   @NotNull final List<? extends InnerChunkData> data,
                                   @NotNull final ProgressIndicator indicator)