Runnable (@NotNull ProgressIndicator indicator) { if (!myFirstRediff) return new EmptyRunnable(); myFirstRediff = false; for (DiffChange change : myDiffChanges) { PropertyRecord record = change.getRecord(); String before = record.getBefore(); String after = record.getAfter(); assert before != null || after != null; if (before == null) { change.setFragments(createEverythingChanged(0, after.length(), 0, StringUtil.countNewLines(after) + 1)); continue; } if (after == null) { change.setFragments(createEverythingChanged(before.length(), 0, StringUtil.countNewLines(before) + 1, 0)); continue; } try { ComparisonManager manager = ComparisonManager.getInstance(); change.setFragments(manager.squash(manager.compareLinesInner(before, after, ComparisonPolicy.DEFAULT, indicator))); } catch (DiffTooBigException e) { change.setFragments(createEverythingChanged(before.length(), after.length(), StringUtil.countNewLines(before) + 1, StringUtil.countNewLines(after) + 1)); } } return () -> { for (DiffChange change : myDiffChanges) { setupHighlighting(change, Side.LEFT); setupHighlighting(change, Side.RIGHT); } }; }