Loading/unloading plugin always adds/removes it from loaded plugins list (IDEA-224401)

GitOrigin-RevId: 0d54397f96daf8b85337d305838970d2a3832682
This commit is contained in:
Dmitry Jemerov
2019-10-09 15:04:38 +00:00
committed by intellij-monorepo-bot
parent ac5dea1ba9
commit aa55ce2990
2 changed files with 5 additions and 3 deletions
@@ -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)
}
@@ -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}));
}
}
}