[python] PY-79486: (WIP) EP can only have ToolId and not icon.

Icons can't be sent to the front

GitOrigin-RevId: 4cc4341094fb6f61f1fdcc62da2d8c3586faaff7
This commit is contained in:
Ilya.Kazakevich
2025-11-24 16:35:26 +00:00
committed by intellij-monorepo-bot
parent 434590383d
commit b5a1bf61a2
16 changed files with 46 additions and 53 deletions
@@ -36,7 +36,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.getOrLogException
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.jetbrains.python.sdk.configuration.CreateSdkInfo
import com.jetbrains.python.sdk.configuration.CreateSdkInfoWithTool
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.setReadyToUseSdk
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.setSdkUsingCreateSdkInfo
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.suppressTipAndInspectionsFor
@@ -98,7 +98,7 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator {
)
}
private suspend fun findSuitableCreateSdkInfos(module: Module): List<CreateSdkInfo> = withContext(Dispatchers.Default) {
private suspend fun findSuitableCreateSdkInfos(module: Module): List<CreateSdkInfoWithTool> = withContext(Dispatchers.Default) {
if (!TrustedProjects.isProjectTrusted(module.project) || ApplicationManager.getApplication().isUnitTestMode) {
emptyList()
}
@@ -112,7 +112,7 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator {
suspend fun configureSdk(
project: Project,
module: Module,
createSdkInfos: List<CreateSdkInfo>,
createSdkInfos: List<CreateSdkInfoWithTool>,
): Unit = withContext(Dispatchers.Default) {
val context = UserDataHolderBase()
@@ -25,6 +25,7 @@ import com.intellij.util.FileName
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PyToolUIInfo
import com.jetbrains.python.ToolId
import com.jetbrains.python.configuration.PyConfigurableInterpreterList
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrNull
@@ -64,10 +65,10 @@ import kotlin.io.path.name
@ApiStatus.Internal
class PyEnvironmentYmlSdkConfiguration : PyProjectSdkConfigurationExtension {
override val toolInfo: PyToolUIInfo = PyToolUIInfo("Conda", PythonSdkUIIcons.Tools.Anaconda)
override val toolId: ToolId = ToolId("Conda")
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo, { checkManageableEnv(module, it) }
{ checkManageableEnv(module, it) }
) { envExists ->
{ needsConfirmation -> createAndAddSdk(module, if (needsConfirmation) Source.CONFIGURATOR else Source.INSPECTION, envExists) }
}
@@ -27,16 +27,13 @@ class PyHatchSdkConfiguration : PyProjectTomlConfigurationExtension {
private val LOGGER = Logger.getInstance(PyHatchSdkConfiguration::class.java)
}
override val toolInfo: PyToolUIInfo = HATCH_UI_INFO
override val toolId: ToolId = HATCH_TOOL_ID
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo,
{ checkExistence -> checkManageableEnv(module, checkExistence, true) },
) { envExists -> { createSdk(module, envExists) } }
override suspend fun createSdkWithoutPyProjectTomlChecks(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo,
{ checkExistence -> checkManageableEnv(module, checkExistence, false) },
) { envExists -> { createSdk(module, envExists) } }
@@ -25,6 +25,7 @@ import com.intellij.ui.components.JBLabel
import com.intellij.util.ui.JBUI
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PyToolUIInfo
import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrLogException
import com.jetbrains.python.sdk.PythonSdkType
@@ -53,10 +54,10 @@ private val LOGGER = Logger.getInstance(PyPipfileSdkConfiguration::class.java)
@ApiStatus.Internal
class PyPipfileSdkConfiguration : PyProjectSdkConfigurationExtension {
override val toolInfo: PyToolUIInfo = PyToolUIInfo("Pipenv", PythonSdkUIIcons.Tools.Pip)
override val toolId: ToolId = ToolId("pipenv")
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo, { checkManageableEnv(module, it) }
{ checkManageableEnv(module, it) }
) { envExists ->
{ needsConfirmation -> createAndAddSdk(module, if (needsConfirmation) Source.CONFIGURATOR else Source.INSPECTION, envExists) }
}
@@ -43,16 +43,13 @@ class PyPoetrySdkConfiguration : PyProjectTomlConfigurationExtension {
private val LOGGER = Logger.getInstance(PyPoetrySdkConfiguration::class.java)
}
override val toolInfo: PyToolUIInfo = POETRY_UI_INFO
override val toolId: ToolId = POETRY_TOOL_ID
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo,
{ checkExistence -> checkManageableEnv(module, checkExistence, true) },
) { { createPoetry(module) } }
override suspend fun createSdkWithoutPyProjectTomlChecks(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo,
{ checkExistence -> checkManageableEnv(module, checkExistence, false) },
) { { createPoetry(module) } }
@@ -21,11 +21,10 @@ import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationC
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.Source
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.VirtualEnvResult
import com.intellij.pycharm.community.ide.impl.configuration.ui.PyAddNewVirtualEnvFromFilePanel
import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.intellij.ui.IdeBorderFactory
import com.intellij.ui.components.JBLabel
import com.intellij.util.ui.JBUI
import com.jetbrains.python.PyToolUIInfo
import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.packaging.PyPackageUtil
import com.jetbrains.python.packaging.management.PythonPackageManager
@@ -49,10 +48,9 @@ private val LOGGER = fileLogger()
@ApiStatus.Internal
class PyRequirementsTxtOrSetupPySdkConfiguration : PyProjectSdkConfigurationExtension {
override val toolInfo: PyToolUIInfo = PyToolUIInfo("venv", PythonSdkUIIcons.Tools.Pip)
override val toolId: ToolId = ToolId("PyRequirements") // This is nonsense, but will be dropped soon
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo,
{ checkManageableEnv(module) },
) { { needsConfirmation -> createAndAddSdk(module, if (needsConfirmation) Source.CONFIGURATOR else Source.INSPECTION) } }
@@ -41,15 +41,14 @@ class PyUvSdkConfiguration : PyProjectTomlConfigurationExtension {
private val existingSdks by lazy { PythonSdkUtil.getAllSdks() }
private val context = UserDataHolderBase()
override val toolInfo: PyToolUIInfo = UV_UI_INFO
override val toolId: ToolId = UV_TOOL_ID
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo, { checkExistence -> checkManageableEnv(module, checkExistence, true) }
{ checkExistence -> checkManageableEnv(module, checkExistence, true) }
) { envExists -> { createUv(module, envExists) } }
override suspend fun createSdkWithoutPyProjectTomlChecks(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo, { checkExistence -> checkManageableEnv(module, checkExistence, false) }
{ checkExistence -> checkManageableEnv(module, checkExistence, false) }
) { envExists -> { createUv(module, envExists) } }
override fun asPyProjectTomlSdkConfigurationExtension(): PyProjectTomlConfigurationExtension = this
@@ -9,6 +9,7 @@ import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBund
import com.intellij.pycharm.community.ide.impl.findEnvOrNull
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PyToolUIInfo
import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.MessageError
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.*
@@ -26,10 +27,10 @@ class PyVenvSdkConfiguration : PyProjectSdkConfigurationExtension {
private val existingSdks by lazy { PythonSdkUtil.getAllSdks() }
private val context = UserDataHolderBase()
override val toolInfo: PyToolUIInfo = PyToolUIInfo("Virtualenv", null)
override val toolId: ToolId = ToolId("Venv")
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
toolInfo, { checkManageableEnv(module) }
{ checkManageableEnv(module) }
) { { setupVenv(module) } }
override fun asPyProjectTomlSdkConfigurationExtension(): PyProjectTomlConfigurationExtension? = null