From 0ef3e04e708ce980ae3be8c7745e5ef9318b5295 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 24 Oct 2016 17:29:07 +0300 Subject: [PATCH] make Caret.getOffset() work correctly from a side thread (under read action) caret/selection marker disposal will be handled by RangeMarkerTree when no references to them will be left --- .../src/com/intellij/openapi/editor/Caret.java | 4 +++- .../com/intellij/openapi/editor/impl/CaretImpl.java | 13 +------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java index 87d7ed1c3899..8e85f25ca51a 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java @@ -121,9 +121,11 @@ public interface Caret extends UserDataHolderEx, Disposable { VisualPosition getVisualPosition(); /** - * Returns the offset of the caret in the document. + * Returns the offset of the caret in the document. Returns 0 for a disposed (invalid) caret. * * @return the caret offset. + * + * @see #isValid() */ int getOffset(); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index 23b6a3c16638..fb201c504137 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -521,9 +521,7 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { private void updateOffsetsFromLogicalPosition() { int offset = myEditor.logicalPositionToOffset(myLogicalCaret); - PositionMarker oldMarker = myPositionMarker; myPositionMarker = new PositionMarker(offset); - oldMarker.dispose(); myLeansTowardsLargerOffsets = myLogicalCaret.leansForward; myVirtualSpaceOffset = myLogicalCaret.column - myEditor.offsetToLogicalPosition(offset).column; } @@ -660,12 +658,9 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { @Override public void dispose() { if (myPositionMarker != null) { - PositionMarker marker = myPositionMarker; myPositionMarker = null; - marker.dispose(); } if (mySelectionMarker != null) { - mySelectionMarker.dispose(); mySelectionMarker = null; } isValid = false; @@ -1162,12 +1157,7 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { oldSelectionStart = oldSelectionEnd = getOffset(); } - SelectionMarker marker = mySelectionMarker; - if (marker != null) { - marker.dispose(); - } - - marker = new SelectionMarker(startOffset, endOffset); + SelectionMarker marker = new SelectionMarker(startOffset, endOffset); if (visualPositionAware) { if (endPosition.after(startPosition)) { setRangeMarkerStartPosition(startPosition); @@ -1224,7 +1214,6 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { if (marker != null && marker.isValid()) { int startOffset = marker.getStartOffset(); int endOffset = marker.getEndOffset(); - marker.dispose(); mySelectionMarker = null; myEditor.getSelectionModel().fireSelectionChanged(startOffset, endOffset, caretOffset, caretOffset); }