From ec81b8f41f63d910c627f63bd22566337fa9d93d Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Wed, 11 Aug 2010 15:22:18 +0400 Subject: [PATCH] IDEA-56405 Soft wrap, editing: typing on line split border replaces wrap sign with line feed; AssertionError at SoftWrapModelImpl.beforeDocumentChangeAtCaret() Avoiding processing soft wraps for removed document regions --- .../impl/softwrap/SoftWrapDocumentChangeManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDocumentChangeManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDocumentChangeManager.java index 4ca0cf4f654f..7191bf369c4f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDocumentChangeManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDocumentChangeManager.java @@ -123,7 +123,12 @@ public class SoftWrapDocumentChangeManager implements DocumentListener { int diff = event.getNewLength() - event.getOldLength(); for (int i = index; i < softWraps.size(); i++) { TextChangeImpl softWrap = softWraps.get(i); - softWrap.advance(diff); + + // Process only soft wraps not affected by the document change. E.g. there is a possible case that whole document text + // is replaced, hence, all registered soft wraps are affected by that and no offset advance should be performed. + if (softWrap.getStart() >= event.getOffset() + event.getOldLength()) { + softWrap.advance(diff); + } } } }