From 9e277df2285943fee738d7ea83e17168ce392e2c Mon Sep 17 00:00:00 2001 From: Andrew Kozlov Date: Sun, 10 Jan 2021 17:39:20 +0100 Subject: [PATCH] [dynamic plugins] additional logging added to find false positive tests #IDEA-246104 GitOrigin-RevId: 7885009c3aef8ace06e92db825199d4ce88ce69a --- .../intellij/ide/plugins/DynamicPlugins.kt | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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 c0bb878413d3..aea391871c59 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt @@ -117,7 +117,7 @@ object DynamicPlugins { ) ?: return false val loader = lazy(LazyThreadSafetyMode.NONE) { OptionalDependencyDescriptorLoader() } - return descriptorsToLoad.all { + return descriptorsToLoad.allWithLogging(load = true) { loadPlugin(it, checkImplementationDetailDependencies = true, loader = loader) } } @@ -138,14 +138,14 @@ object DynamicPlugins { load = false, ) ?: return false - return descriptorsToUnload.reversed().all { + return descriptorsToUnload.reversed().allWithLogging(load = false) { unloadPluginWithProgress(project, parentComponent, it, options) } } private fun loadFullDescriptorsWithoutRestart( plugins: Collection, - load: Boolean + load: Boolean, ): List? { val loadedPlugins = PluginManagerCore.getLoadedPlugins() val descriptors = plugins @@ -156,7 +156,7 @@ object DynamicPlugins { .toList() val message = descriptors.joinToString( - prefix = "Plugins to ${if (load) "load" else "unload"}: [", + prefix = "Plugins to ${operationText(load)}: [", postfix = "]" ) { it.pluginId.idString @@ -169,6 +169,19 @@ object DynamicPlugins { null } + private fun Collection.allWithLogging( + load: Boolean, + predicate: (IdeaPluginDescriptorImpl) -> Boolean, + ): Boolean { + return firstOrNull { + predicate.invoke(it).not() + }?.also { + LOG.info("Failed to ${operationText(load)}: $it") + } == null + } + + private fun operationText(load: Boolean) = if (load) "load" else "unload" + /** * @param context Plugins which are being loaded at the same time as [descriptor] */