From fa8e49b309f0ce72b9aced7c3cf3a9a212232cc4 Mon Sep 17 00:00:00 2001 From: "Ilia.Shulgin" Date: Fri, 23 Jan 2026 11:41:48 +0100 Subject: [PATCH] [vcs] Cleanup listeners on LST release (IJPL-231568) Space-RevId: 498e34bbb24e37225dce73bc5b0dd2baeda11878 GitOrigin-RevId: caa325431140dadfec32255c0f1f1414632332c6 --- .../com/intellij/openapi/vcs/ex/LineStatusTrackerBase.kt | 1 + .../openapi/vcs/ex/PartialLocalLineStatusTracker.kt | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerBase.kt b/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerBase.kt index 84bb7934b3ec..f927cd66adaa 100644 --- a/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerBase.kt +++ b/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerBase.kt @@ -116,6 +116,7 @@ abstract class LineStatusTrackerBase( isReleased = true Disposer.dispose(disposable) + listeners.listeners.clear() } if (!ApplicationManager.getApplication().isDispatchThread || LOCK.isHeldByCurrentThread) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt index 8eb16f796dfa..f8993efa9ba4 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt @@ -145,6 +145,8 @@ class ChangelistsLocalLineStatusTracker internal constructor(project: Project, private val undoableActions: WeakList = WeakList() + private val eventDispatcher = EventDispatcher.create(PartialLocalLineStatusTracker.Listener::class.java) + init { defaultMarker = ChangeListMarker(changeListManager.defaultChangeList) affectedChangeLists.add(defaultMarker.changelistId) @@ -155,6 +157,10 @@ class ChangelistsLocalLineStatusTracker internal constructor(project: Project, Disposer.register(disposable, Disposable { dropExistingUndoActions() }) } + Disposer.register(disposable) { + eventDispatcher.listeners.clear() + } + documentTracker.addHandler(PartialDocumentTrackerHandler()) assert(blocks.isEmpty()) } @@ -1021,7 +1027,6 @@ class ChangelistsLocalLineStatusTracker internal constructor(project: Project, } - private val eventDispatcher = EventDispatcher.create(PartialLocalLineStatusTracker.Listener::class.java) override fun addListener(listener: PartialLocalLineStatusTracker.Listener, disposable: Disposable) { eventDispatcher.addListener(listener, disposable) }