void (@NotNull IncrementalCacheUpdateEvent event) { int lengthDiff = event.getLengthDiff(); int recalcEndOffsetTranslated = event.getActualEndOffset() - lengthDiff; int firstIndex = -1; int softWrappedLinesDiff = myStorage.getNumberOfSoftWrapsInRange(event.getStartOffset() + 1, myEditor.getDocument().getTextLength()); boolean softWrapsChanged = softWrappedLinesDiff > 0; for (int i = 0; i < myAffectedByUpdateSoftWraps.size(); i++) { SoftWrapImpl softWrap = myAffectedByUpdateSoftWraps.get(i); if (firstIndex < 0) { if (softWrap.getStart() > recalcEndOffsetTranslated) { firstIndex = i; if (lengthDiff == 0) { break; } } else { softWrappedLinesDiff--; softWrapsChanged = true; } } if (firstIndex >= 0 && i >= firstIndex) { softWrap.advance(lengthDiff); } } if (firstIndex >= 0) { List<SoftWrapImpl> updated = myAffectedByUpdateSoftWraps.subList(firstIndex, myAffectedByUpdateSoftWraps.size()); SoftWrapImpl lastSoftWrap = getLastSoftWrap(); if (lastSoftWrap != null && lastSoftWrap.getStart() >= updated.get(0).getStart()) { LOG.error("Invalid soft wrap recalculation", new Attachment("state.txt", myEditor.getSoftWrapModel().toString())); } myStorage.addAll(updated); } myAffectedByUpdateSoftWraps.clear(); if (softWrapsChanged) { myStorage.notifyListenersAboutChange(); } }