From 14b2a560f2fcde3a591a98ab2b03495941378b61 Mon Sep 17 00:00:00 2001 From: Stanislav Alekseev Date: Tue, 11 Nov 2025 13:19:12 +0200 Subject: [PATCH] [editor] IJPL-793 clean up EditorImpl references on release Signed-off-by: Stanislav Alekseev GitOrigin-RevId: 4147715ce92db7b5683a5c6fbca8cf7c9bbb43e9 --- .../openapi/editor/impl/EditorCaretMoveService.kt | 8 +++----- .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorCaretMoveService.kt b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorCaretMoveService.kt index 15222f357943..385e55edaf39 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorCaretMoveService.kt +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorCaretMoveService.kt @@ -46,8 +46,6 @@ internal class EditorCaretMoveService(coroutineScope: CoroutineScope) { } } - private val lastPosMap: MutableMap = ConcurrentHashMap() - /** * Set the cursor position immediately without animation. This does not go through the * coroutine-based logic which can delay the cursor position update. This is required for @@ -56,7 +54,7 @@ internal class EditorCaretMoveService(coroutineScope: CoroutineScope) { fun setCursorPositionImmediately(editor: EditorImpl) { val animationStates = calculateUpdates(editor) for (state in animationStates) { - lastPosMap[state.caret] = state.finalPos + editor.lastPosMap[state.caret] = state.finalPos } editor.myCaretCursor.setPositions(animationStates.map { state -> EditorImpl.CaretRectangle(state.finalPos, state.width, state.caret, state.isRtl) @@ -97,7 +95,7 @@ internal class EditorCaretMoveService(coroutineScope: CoroutineScope) { val step = MILLIS_SECOND / (2 * refreshRate) val animationStates = calculateUpdates(editor).map { - val lastPos = lastPosMap.getOrPut(it.caret) { it.finalPos } + val lastPos = editor.lastPosMap.getOrPut(it.caret) { it.finalPos } AnimationState(lastPos, it) } @@ -132,7 +130,7 @@ internal class EditorCaretMoveService(coroutineScope: CoroutineScope) { val y = startPos.y + (finalPos.y - startPos.y) * t val interpolated = Point2D.Double(if (t >= 1) finalPos.x else x, if (t >= 1) finalPos.y else y) - lastPosMap[update.caret] = interpolated + editor.lastPosMap[update.caret] = interpolated EditorImpl.CaretRectangle(interpolated, update.width, update.caret, update.isRtl) }.toTypedArray() diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index d22b3376fbf9..6156244dd164 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -127,6 +127,7 @@ import java.text.AttributedString; import java.text.CharacterIterator; import java.util.*; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; @@ -3177,6 +3178,9 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } } + @ApiStatus.Internal + final ConcurrentHashMap lastPosMap = new ConcurrentHashMap<>(); + private final @NotNull EditorCaretMoveService caretMoveService = EditorCaretMoveService.getInstance(); private void setCursorPosition() {