From 7a72ed802017fafef386eb3b800ddc59074dda98 Mon Sep 17 00:00:00 2001 From: "Elena.Korotkova" Date: Tue, 6 Apr 2021 16:48:19 +0300 Subject: [PATCH] fix memory leak in ToolbarActionTrackingPopup GitOrigin-RevId: d21718da40facbd663db55f771002b11eab81464 --- .../src/com/intellij/internal/ui/ComponentPanelTestAction.java | 3 ++- platform/platform-impl/src/com/intellij/ui/GotItTooltip.kt | 2 +- .../platform-impl/src/com/intellij/ui/ToolbarActionTracker.kt | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java b/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java index 650fc717ad03..308811d5a610 100644 --- a/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java +++ b/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java @@ -836,7 +836,8 @@ public class ComponentPanelTestAction extends DumbAwareAction { toolbarActions.add(new MyAction("Short", AllIcons.Ide.Rating1) { { GotItTooltip actionGotIt = new GotItTooltip("short.action", "Short action text", project).withHeader("Header"); - actionGotIt.assignTo(getTemplatePresentation(), GotItTooltip.BOTTOM_MIDDLE); + actionGotIt.assignTo(getTemplatePresentation(), + GotItTooltip.BOTTOM_MIDDLE, ()->{}); } }.withShortCut("control K")); toolbarActions.add(new MyAction("Long", AllIcons.Ide.Rating2).withShortCut("control N")); diff --git a/platform/platform-impl/src/com/intellij/ui/GotItTooltip.kt b/platform/platform-impl/src/com/intellij/ui/GotItTooltip.kt index 25899b0a034b..22ef338611d3 100644 --- a/platform/platform-impl/src/com/intellij/ui/GotItTooltip.kt +++ b/platform/platform-impl/src/com/intellij/ui/GotItTooltip.kt @@ -92,7 +92,7 @@ class GotItTooltip(@NonNls val id: String, @Nls val text: String, private val pa Disposer.register(parentDisposable, this) } - override fun assignTo(presentation: Presentation, pointProvider: (Component) -> Point) { + override fun assignTo(presentation: Presentation, pointProvider: (Component) -> Point, disposeAction: Runnable?) { presentation.putClientProperty(PRESENTATION_GOT_IT_KEY, ActionContext(this, pointProvider)) Disposer.register(this, Disposable { presentation.putClientProperty(PRESENTATION_GOT_IT_KEY, null) }) } diff --git a/platform/platform-impl/src/com/intellij/ui/ToolbarActionTracker.kt b/platform/platform-impl/src/com/intellij/ui/ToolbarActionTracker.kt index bc00ef721073..39305ac62c79 100644 --- a/platform/platform-impl/src/com/intellij/ui/ToolbarActionTracker.kt +++ b/platform/platform-impl/src/com/intellij/ui/ToolbarActionTracker.kt @@ -14,6 +14,7 @@ import java.awt.event.ComponentEvent import javax.swing.JComponent import javax.swing.event.AncestorEvent import org.jetbrains.annotations.ApiStatus.Experimental +import java.util.function.Consumer @Experimental @@ -73,7 +74,7 @@ abstract class ToolbarActionTracker: Disposable { * the tooltip if it can be shown. Term "follow" is used because ActionToolbar updates its content and ActionButton's * showing status / location may change in time. */ - abstract fun assignTo(presentation: Presentation, pointProvider: (Component) -> Point) + abstract fun assignTo(presentation: Presentation, pointProvider: (Component) -> Point, disposeAction: Runnable? = null) abstract fun wasCreated(): Boolean