changedUpdate exception
authorAlexey Kudravtsev <cdr@intellij.com>
Fri, 12 Feb 2010 16:10:04 +0000 (12 19:10 +0300)
committerAlexey Kudravtsev <cdr@intellij.com>
Mon, 15 Feb 2010 10:53:52 +0000 (15 13:53 +0300)
platform/platform-impl/src/com/intellij/openapi/editor/impl/PersistentRangeMarker.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/event/DocumentEventImpl.java

index deda8e1..4ced1be 100644 (file)
@@ -38,10 +38,16 @@ public class PersistentRangeMarker extends RangeMarkerImpl {
     if (getStartOffset() < myDocument.getTextLength()) {
       myStartLine = myDocument.getLineNumber(getStartOffset());
       myStartColumn = getStartOffset() - myDocument.getLineStartOffset(myStartLine);
+      if (myStartColumn < 0) {
+        invalidate();
+      }
     }
     if (getEndOffset() < myDocument.getTextLength()) {
       myEndLine = myDocument.getLineNumber(getEndOffset());
       myEndColumn = getEndOffset() - myDocument.getLineStartOffset(myEndLine);
+      if (myEndColumn < 0) {
+        invalidate();
+      }
     }
   }
 
@@ -64,15 +70,15 @@ public class PersistentRangeMarker extends RangeMarkerImpl {
       else{
         myEnd = getDocument().getLineStartOffset(myEndLine) + myEndColumn;
       }
-      if (myEnd < myStart) {
-        invalidate();
-      }
     }
-    else{
+    else {
       super.changedUpdateImpl(e);
       if (isValid()){
         storeLinesAndCols();
       }
     }
+    if (myEnd < myStart || myEnd > getDocument().getTextLength()) {
+      invalidate();
+    }
   }
 }
index a6b9cc7..d73844a 100644 (file)
@@ -132,7 +132,7 @@ public class DocumentEventImpl extends DocumentEvent {
   @SuppressWarnings({"HardCodedStringLiteral"})
   public String toString() {
     return "DocumentEventImpl[myOffset=" + myOffset + ", myOldLength=" + myOldLength + ", myNewLength=" + myNewLength +
-           ", myOldString='" + myOldString + "', myNewString='" + myNewString + "']";
+           ", myOldString='" + myOldString + "', myNewString='" + myNewString + "']" + (isWholeTextReplaced() ? " Whole." : ".");
   }
 
   public boolean isWholeTextReplaced() {