diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt index f8e86517a64d..0927e8a703bd 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt @@ -19,6 +19,7 @@ import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.impl.ProjectImpl import com.intellij.openapi.util.IconLoader import com.intellij.openapi.util.registry.Registry +import com.intellij.util.ArrayUtil import com.intellij.util.MemoryDumpHelper import com.intellij.util.ReflectionUtil import com.intellij.util.SystemProperties @@ -158,6 +159,8 @@ object DynamicPlugins { jdomSerializer.clearSerializationCaches() BeanBinding.clearSerializationCaches() + PluginManagerCore.setPlugins(ArrayUtil.remove(PluginManagerCore.getPlugins(), loadedPluginDescriptor)) + val classLoaderUnloaded = loadedPluginDescriptor.unloadClassLoader() if (!classLoaderUnloaded && Registry.`is`("ide.plugins.snapshot.on.unload.fail") && MemoryDumpHelper.memoryDumpAvailable()) { val snapshotFolder = System.getProperty("snapshots.path", SystemProperties.getUserHome()) @@ -166,6 +169,7 @@ object DynamicPlugins { MemoryDumpHelper.captureMemoryDump(snapshotPath) GROUP.createNotification("Captured memory snapshot on plugin unload fail: $snapshotPath", NotificationType.WARNING).notify(null) } + return classLoaderUnloaded } @@ -184,6 +188,7 @@ object DynamicPlugins { (ActionManager.getInstance() as ActionManagerImpl).registerPluginActions(pluginDescriptor) } + PluginManagerCore.setPlugins(ArrayUtil.mergeArrays(PluginManagerCore.getPlugins(), arrayOf(pluginDescriptor))) application.messageBus.syncPublisher(DynamicPluginListener.TOPIC).pluginLoaded(pluginDescriptor) } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java index 341f6932ed08..9598653c7c06 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java @@ -24,7 +24,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtilRt; import com.intellij.util.Consumer; import com.intellij.util.io.Decompressor; @@ -93,7 +92,6 @@ public class PluginInstaller { boolean uninstalledWithoutRestart = DynamicPlugins.unloadPlugin((IdeaPluginDescriptorImpl)pluginDescriptor); if (uninstalledWithoutRestart) { FileUtil.delete(pluginDescriptor.getPath()); - PluginManagerCore.setPlugins(ArrayUtil.remove(PluginManagerCore.getPlugins(), pluginDescriptor)); } else { try { @@ -252,7 +250,6 @@ public class PluginInstaller { IdeaPluginDescriptorImpl targetDescriptor = PluginManagerCore.loadDescriptor(targetFile, PluginManagerCore.PLUGIN_XML); if (targetDescriptor != null) { DynamicPlugins.loadPlugin(targetDescriptor); - PluginManagerCore.setPlugins(ArrayUtil.mergeArrays(PluginManagerCore.getPlugins(), new IdeaPluginDescriptor[]{targetDescriptor})); } } }