From 56d2fb7229a3fdb9904966b52c3948eefd4c552f Mon Sep 17 00:00:00 2001 From: Alexandr Trushev Date: Tue, 2 Jul 2024 12:58:51 +0200 Subject: [PATCH] RIDER-114196 Sticky lines: add api to receive notification when all sticky lines are removed GitOrigin-RevId: e97a4ab6523f03c5a452323375548f2c91048023 --- .../editor/impl/stickyLines/StickyLinesCollector.kt | 2 +- .../editor/impl/stickyLines/StickyLinesManager.kt | 5 ++++- .../editor/impl/stickyLines/StickyLinesModel.java | 12 ++++++++++-- .../impl/stickyLines/StickyLinesModelImpl.java | 7 +++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesCollector.kt b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesCollector.kt index f858e5c9f9f2..0f1aab35242f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesCollector.kt +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesCollector.kt @@ -126,7 +126,7 @@ class StickyLinesCollector(private val project: Project, private val document: D ", old removed: ${outdatedLines.size}" + ", ${debugPsiFile(psiFile)}" } - stickyModel.notifyListeners() + stickyModel.notifyLinesUpdate() } private fun stickyLinesModel(psiFile: PsiFile): StickyLinesModel? { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesManager.kt b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesManager.kt index dd03f7bf8aad..b396e30916f0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesManager.kt +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesManager.kt @@ -102,10 +102,13 @@ internal class StickyLinesManager( } } - override fun modelChanged() { + override fun linesUpdated() { recalculateAndRepaintLines() } + override fun linesRemoved() { + } + override fun dispose() { stickyModel.removeListener(this) } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModel.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModel.java index 6c9f84b32edc..e0acd87fbff5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModel.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModel.java @@ -48,7 +48,7 @@ public interface StickyLinesModel { void removeListener(@NotNull Listener listener); - void notifyListeners(); + void notifyLinesUpdate(); /** * Marker associated with sticky line to distinguish the highlighting daemon which produced the line. @@ -68,6 +68,14 @@ public interface StickyLinesModel { } interface Listener { - void modelChanged(); + /** + * Called when a batch of sticky lines is added or removed + */ + void linesUpdated(); + + /** + * Called when all sticky lines are removed + */ + void linesRemoved(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModelImpl.java index 645063e31852..360ddd1009bf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/stickyLines/StickyLinesModelImpl.java @@ -145,9 +145,9 @@ public final class StickyLinesModelImpl implements StickyLinesModel { } @Override - public void notifyListeners() { + public void notifyLinesUpdate() { for (Listener listener : myListeners) { - listener.modelChanged(); + listener.linesUpdated(); } } @@ -159,6 +159,9 @@ public final class StickyLinesModelImpl implements StickyLinesModel { for (StickyLine line : getAllStickyLines()) { removeStickyLine(line); } + for (Listener listener : myListeners) { + listener.linesRemoved(); + } if (project != null) { restartStickyLinesPass(project); }