From e58bfaf35efe3d3403b1b6e22c4e57d71075f70f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 20 Apr 2011 13:32:53 +0400 Subject: [PATCH] EA-26097 --- .../editor/impl/PersistentRangeMarker.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/PersistentRangeMarker.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/PersistentRangeMarker.java index 61f9a3e365c2..51fd61ac7d98 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/PersistentRangeMarker.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/PersistentRangeMarker.java @@ -41,20 +41,28 @@ class PersistentRangeMarker extends RangeMarkerImpl { private void storeLinesAndCols(DocumentEvent e) { // document might have been changed already - if (getStartOffset() < myDocument.getTextLength()) { - myStartLine = myDocument.getLineNumber(getStartOffset()); - myStartColumn = getStartOffset() - myDocument.getLineStartOffset(myStartLine); + int startOffset = getStartOffset(); + if (startOffset <= myDocument.getTextLength()) { + myStartLine = myDocument.getLineNumber(startOffset); + myStartColumn = startOffset - myDocument.getLineStartOffset(myStartLine); if (myStartColumn < 0) { invalidate(e); } } - if (getEndOffset() < myDocument.getTextLength()) { - myEndLine = myDocument.getLineNumber(getEndOffset()); - myEndColumn = getEndOffset() - myDocument.getLineStartOffset(myEndLine); + else { + invalidate(e); + } + int endOffset = getEndOffset(); + if (endOffset <= myDocument.getTextLength()) { + myEndLine = myDocument.getLineNumber(endOffset); + myEndColumn = endOffset - myDocument.getLineStartOffset(myEndLine); if (myEndColumn < 0) { invalidate(e); } } + else { + invalidate(e); + } } @Override @@ -83,7 +91,11 @@ class PersistentRangeMarker extends RangeMarkerImpl { storeLinesAndCols(e); } } - if (getEndOffset() < getStartOffset() || getEndOffset() > getDocument().getTextLength()) { + if (intervalEnd() < intervalStart() || + intervalEnd() > getDocument().getTextLength() || + myEndLine < myStartLine || + myStartLine == myEndLine && myEndColumn < myStartColumn || + getDocument().getLineCount() < myEndLine) { invalidate(e); } }