From 0be5ad3d6e7796838814075dd1bb20fbf3aa6652 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Tue, 21 Jan 2020 11:17:17 +0300 Subject: [PATCH] fix listener leak on settings close GitOrigin-RevId: 5001f015e65dc339ccccfc2d6c782749b03bcc8a --- .../hints/settings/InlayHintsConfigurable.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/InlayHintsConfigurable.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/InlayHintsConfigurable.kt index 27078b587725..68d8fbff9ff6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/InlayHintsConfigurable.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/InlayHintsConfigurable.kt @@ -10,12 +10,14 @@ import com.intellij.openapi.options.Configurable import com.intellij.openapi.options.ShowSettingsUtil import com.intellij.openapi.options.ex.Settings import com.intellij.openapi.project.Project +import com.intellij.util.messages.MessageBusConnection import javax.swing.JComponent class InlayHintsConfigurable(val project: Project) : Configurable, Configurable.Composite { private val settings = InlayHintsSettings.instance() private val configurables: List private val panel: InlayHintsPanel + private val connection: MessageBusConnection init { val allInlayLanguages = InlaySettingsProvider.EP.getExtensions() @@ -24,16 +26,14 @@ class InlayHintsConfigurable(val project: Project) : Configurable, Configurable. configurables = allInlayLanguages.map { SingleLanguageInlayHintsConfigurable(project, it) } panel = InlayHintsPanel(allInlayLanguages, settings) - ApplicationManager.getApplication().messageBus.connect(project).subscribe( - InlayHintsSettings.INLAY_SETTINGS_CHANGED, - ConfigurationChangeListener(configurables)) + connection = ApplicationManager.getApplication().messageBus.connect(project) + connection.subscribe(InlayHintsSettings.INLAY_SETTINGS_CHANGED, ConfigurationChangeListener(configurables)) } override fun getConfigurables(): Array { return configurables.toTypedArray() } - override fun isModified(): Boolean { return panel.isModified() } @@ -54,6 +54,10 @@ class InlayHintsConfigurable(val project: Project) : Configurable, Configurable. panel.reset() } + override fun disposeUIResources() { + connection.disconnect() + } + fun loadFromSettings() { for (configurable in configurables) { configurable.reset()