From a3eae2fa0500ef73eb1db3d096567bd1a68895a2 Mon Sep 17 00:00:00 2001 From: Vitaly Legchilkin Date: Thu, 12 Jun 2025 16:36:52 +0000 Subject: [PATCH] [python] remove venv/conda/custom selector for add python sdk dialog (PY-79881) Merge-request: IJ-MR-165579 Merged-by: Vitaly Legchilkin GitOrigin-RevId: 9de4cc81c81815b5a2ad230a53da9105e3af3629 --- .../sdk/add/v2/PyLocalAddSdkProvider.kt | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/add/v2/PyLocalAddSdkProvider.kt b/python/src/com/jetbrains/python/sdk/add/v2/PyLocalAddSdkProvider.kt index 5aff8781cd4d..fb36f73aa67f 100644 --- a/python/src/com/jetbrains/python/sdk/add/v2/PyLocalAddSdkProvider.kt +++ b/python/src/com/jetbrains/python/sdk/add/v2/PyLocalAddSdkProvider.kt @@ -2,14 +2,17 @@ package com.jetbrains.python.sdk.add.v2 import com.intellij.openapi.module.Module +import com.intellij.openapi.observable.properties.AtomicProperty import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.ui.DialogPanel import com.intellij.openapi.ui.DialogWrapper import com.intellij.openapi.ui.ValidationInfo +import com.intellij.openapi.ui.validation.WHEN_PROPERTY_CHANGED import com.intellij.openapi.util.UserDataHolder import com.intellij.platform.ide.progress.runWithModalProgressBlocking import com.intellij.ui.dsl.builder.panel +import com.intellij.util.ui.launchOnShow import com.jetbrains.python.PyBundle import com.jetbrains.python.errorProcessing.ErrorSink import com.jetbrains.python.icons.PythonIcons @@ -19,7 +22,9 @@ import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction import com.jetbrains.python.sdk.add.PyAddSdkProvider import com.jetbrains.python.sdk.add.PyAddSdkStateListener import com.jetbrains.python.sdk.add.PyAddSdkView +import com.jetbrains.python.sdk.add.collector.PythonNewInterpreterAddedCollector import com.jetbrains.python.util.ShowingMessageErrorSync +import kotlinx.coroutines.supervisorScope import java.awt.Component import java.nio.file.Path import javax.swing.Icon @@ -51,21 +56,30 @@ class V3AddSdkPanel(val project: Project, val module: Module?, val projectPath: private val errorSink: ErrorSink = ShowingMessageErrorSync - private val sdkPanelBuilderAndSdkCreator: PythonSdkPanelBuilderAndSdkCreator = PythonSdkPanelBuilderAndSdkCreator( - onlyAllowedInterpreterTypes = null, - errorSink = ShowingMessageErrorSync, - module = module, - limitExistingEnvironments = false, - ) + private lateinit var mainPanel: PythonAddCustomInterpreter + private lateinit var model: PythonLocalAddInterpreterModel private val dialogPanel: DialogPanel = panel { - sdkPanelBuilderAndSdkCreator.buildPanel(this, ProjectPathFlows.create((projectPath))) + model = PythonLocalAddInterpreterModel(ProjectPathFlows.create((projectPath))) + model.navigator.selectionMode = AtomicProperty(PythonInterpreterSelectionMode.CUSTOM) + mainPanel = PythonAddCustomInterpreter( + model = model, + module = module, + errorSink = errorSink, + limitExistingEnvironments = false + ) + mainPanel.setupUI(this, WHEN_PROPERTY_CHANGED(AtomicProperty(projectPath))) } private var validationInfos: List = emptyList() init { - sdkPanelBuilderAndSdkCreator.onShownInitialization(dialogPanel) + dialogPanel.launchOnShow("V3AddSdkPanel launchOnShow") { + supervisorScope { + model.initialize(this@supervisorScope) + mainPanel.onShown(this@supervisorScope) + } + } dialogPanel.registerValidators(dialogWrapper.disposable) { compInfos -> validationInfos = compInfos.values.toList() @@ -77,12 +91,16 @@ class V3AddSdkPanel(val project: Project, val module: Module?, val projectPath: val moduleOrProject = if (module != null) ModuleOrProject.ModuleAndProject(module) else ModuleOrProject.ProjectOnly(project) val sdk = runWithModalProgressBlocking(project, PyBundle.message("python.sdk.creating.python.sdk")) { dialogPanel.apply() - sdkPanelBuilderAndSdkCreator.getSdk(moduleOrProject).getOr { + val sdkManager = mainPanel.currentSdkManager + sdkManager.getOrCreateSdk(moduleOrProject).getOr { errorSink.emit(it.error) return@runWithModalProgressBlocking null + }.also { + val isPreviouslyConfigured = sdkManager.createStatisticsInfo(PythonInterpreterCreationTargets.LOCAL_MACHINE).previouslyConfigured + PythonNewInterpreterAddedCollector.logPythonNewInterpreterAdded(it, isPreviouslyConfigured) } } - return sdk?.first + return sdk } override fun onSelected() {