From 13973b2827eb8a28919c437a2291a2734f491ecd Mon Sep 17 00:00:00 2001 From: Vassiliy Kudryashov Date: Fri, 24 Apr 2020 12:58:21 +0200 Subject: [PATCH] IDEA-238615 HintManagerImpl > IntentionHintComponent leaks PsiFile on plugin unload GitOrigin-RevId: f20c56d9f81e4544f462262a3cde7dfa2361df1d --- .../com/intellij/codeInsight/hint/HintManagerImpl.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java b/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java index dd87ffeecd8b..9cb25814065e 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java @@ -2,6 +2,8 @@ package com.intellij.codeInsight.hint; import com.intellij.ide.IdeTooltip; +import com.intellij.ide.plugins.DynamicPluginListener; +import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.actionSystem.ex.AnActionListener; @@ -112,6 +114,7 @@ public class HintManagerImpl extends HintManager { MessageBusConnection busConnection = ApplicationManager.getApplication().getMessageBus().connect(); busConnection.subscribe(ProjectManager.TOPIC, projectManagerListener); busConnection.subscribe(AnActionListener.TOPIC, new MyAnActionListener()); + busConnection.subscribe(DynamicPluginListener.TOPIC, new MyDynamicPluginListener()); myEditorMouseListener = new EditorMouseListener() { @Override @@ -917,6 +920,13 @@ public class HintManagerImpl extends HintManager { } } + + private final class MyDynamicPluginListener implements DynamicPluginListener { + @Override + public void pluginUnloaded(@NotNull IdeaPluginDescriptor pluginDescriptor, boolean isUpdate) { + cleanup(); + } + } /** * We have to spy for all opened projects to register MyEditorManagerListener into * all opened projects.