From aaae53f01ed8a3ce53ef59752edd4d6b0b3b1ffd Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Tue, 12 Aug 2025 15:17:22 +0200 Subject: [PATCH] [execution] IJPL-201709 check whether a plugin can be enabled for an unknown run configuration quick fix - do not offer an enablement quick fix if the Ultimate plugin is disabled and the given plugin requires it (cherry picked from commit d3d2182b0368a2f55d9b927c049ce3d3cdfb8e85) IJ-CR-172226 GitOrigin-RevId: 98008448f08a14001b2083c0a9d4af069d991eb8 --- .../UnknownRunConfiguration.java | 4 +++- platform/ide-core/plugins/api-dump.txt | 6 +++++ .../ide/plugins/UltimateDependencyChecker.kt | 24 +++++++++++++++++++ .../plugins/UltimateDependencyCheckerImpl.kt | 16 +++++++++++++ .../src/META-INF/PlatformExtensions.xml | 2 ++ 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 platform/ide-core/plugins/src/com/intellij/ide/plugins/UltimateDependencyChecker.kt create mode 100644 platform/platform-impl/src/com/intellij/ide/plugins/UltimateDependencyCheckerImpl.kt diff --git a/platform/execution/src/com/intellij/execution/configurations/UnknownRunConfiguration.java b/platform/execution/src/com/intellij/execution/configurations/UnknownRunConfiguration.java index 05fd0f35f113..b930b2207e5c 100644 --- a/platform/execution/src/com/intellij/execution/configurations/UnknownRunConfiguration.java +++ b/platform/execution/src/com/intellij/execution/configurations/UnknownRunConfiguration.java @@ -7,6 +7,7 @@ import com.intellij.execution.Executor; import com.intellij.execution.RunManager; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.ide.plugins.PluginFeatureService; +import com.intellij.ide.plugins.UltimateDependencyChecker; import com.intellij.ide.plugins.PluginManagerConfigurableService; import com.intellij.ide.plugins.advertiser.FeaturePluginData; import com.intellij.openapi.options.SettingsEditor; @@ -109,7 +110,8 @@ public final class UnknownRunConfiguration implements RunConfiguration, WithoutO return; } FeaturePluginData plugin = PluginFeatureService.Companion.__getPluginForFeature(RunManager.CONFIGURATION_TYPE_FEATURE_ID, typeId); - if (plugin != null) { + if (plugin != null && + UltimateDependencyChecker.getInstance().canBeEnabled(plugin.pluginData.getPluginId())) { RuntimeConfigurationError err = new RuntimeConfigurationError( ExecutionBundle.message("dialog.message.broken.configuration.missing.plugin", plugin.displayName)); err.setQuickFix(() -> { diff --git a/platform/ide-core/plugins/api-dump.txt b/platform/ide-core/plugins/api-dump.txt index 0941c5856a63..ca57e02b7e8f 100644 --- a/platform/ide-core/plugins/api-dump.txt +++ b/platform/ide-core/plugins/api-dump.txt @@ -1,3 +1,9 @@ com.intellij.ide.plugins.PluginManagerConfigurableService - s:getInstance():com.intellij.ide.plugins.PluginManagerConfigurableService - a:showPluginConfigurableAndEnable(com.intellij.openapi.project.Project,java.lang.String[]):V +com.intellij.ide.plugins.UltimateDependencyChecker +- sf:Companion:com.intellij.ide.plugins.UltimateDependencyChecker$Companion +- a:canBeEnabled(com.intellij.openapi.extensions.PluginId):Z +- s:getInstance():com.intellij.ide.plugins.UltimateDependencyChecker +f:com.intellij.ide.plugins.UltimateDependencyChecker$Companion +- f:getInstance():com.intellij.ide.plugins.UltimateDependencyChecker diff --git a/platform/ide-core/plugins/src/com/intellij/ide/plugins/UltimateDependencyChecker.kt b/platform/ide-core/plugins/src/com/intellij/ide/plugins/UltimateDependencyChecker.kt new file mode 100644 index 000000000000..0e4ca7cea2ed --- /dev/null +++ b/platform/ide-core/plugins/src/com/intellij/ide/plugins/UltimateDependencyChecker.kt @@ -0,0 +1,24 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.ide.plugins + +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.components.service +import com.intellij.openapi.extensions.PluginId + +interface UltimateDependencyChecker { + companion object { + @JvmStatic + fun getInstance(): UltimateDependencyChecker = ApplicationManager.getApplication().service() + } + + /** + * Checks whether a plugin with the specified [pluginId] can be enabled in the current IDE context. + * + * The result depends on whether the Ultimate plugin is enabled and whether the given plugin requires the Ultimate plugin. + * If the Ultimate plugin is disabled and the plugin has a dependency on it, this method will return `false`. + * + * @param pluginId the unique identifier of the plugin to check. + * @return `true` if the plugin can be enabled in the current IDE context, `false` otherwise. + */ + fun canBeEnabled(pluginId: PluginId): Boolean +} \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/UltimateDependencyCheckerImpl.kt b/platform/platform-impl/src/com/intellij/ide/plugins/UltimateDependencyCheckerImpl.kt new file mode 100644 index 000000000000..34d66565ab38 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ide/plugins/UltimateDependencyCheckerImpl.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.ide.plugins + +import com.intellij.openapi.extensions.PluginId + +internal class UltimateDependencyCheckerImpl : UltimateDependencyChecker { + override fun canBeEnabled(pluginId: PluginId): Boolean { + if (!PluginManagerCore.isDisabled(PluginManagerCore.ULTIMATE_PLUGIN_ID)) return true + + val pluginIdMap = PluginManagerCore.buildPluginIdMap() + val pluginSet = PluginManagerCore.getPluginSet() + val contentModuleIdMap = pluginSet.buildContentModuleIdMap() + + return !pluginRequiresUltimatePlugin(pluginId, pluginIdMap, contentModuleIdMap) + } +} \ No newline at end of file diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index b9f00e500b2f..d9bb85bfe71c 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -149,6 +149,8 @@ +