Runnable (@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); } }; }