From e431ddbba030c59cef94590d9f9db871db5badd6 Mon Sep 17 00:00:00 2001 From: "Vladimir.Koshelev" Date: Wed, 22 Oct 2025 13:37:21 +0200 Subject: [PATCH] [python] PY-83881 pass DumbAware runnable to runWhenProjectIsInitialized to avoid waiting for indexation before setting a correct sdk (cherry picked from commit 0a8fd1b3ebcd459f45c24d4d58f2098abe190dc3) IJ-CR-181097 GitOrigin-RevId: 7a0d58aaf913eb9a1c1d035b1a8e16773b08b27c --- .../ide/impl/PythonSdkConfigurator.kt | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PythonSdkConfigurator.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PythonSdkConfigurator.kt index 8699571b56ae..a5ef08e87932 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PythonSdkConfigurator.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PythonSdkConfigurator.kt @@ -4,10 +4,13 @@ package com.intellij.pycharm.community.ide.impl import com.intellij.ide.trustedProjects.TrustedProjects import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.EDT +import com.intellij.openapi.components.Service +import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.debug import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.extensions.ExtensionNotApplicableException import com.intellij.openapi.module.Module +import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.impl.getOrInitializeModule @@ -39,7 +42,9 @@ import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.setSdkUs import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.suppressTipAndInspectionsFor import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension import com.jetbrains.python.sdk.impl.PySdkBundle +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.jetbrains.annotations.ApiStatus import java.nio.file.Path @@ -72,16 +77,19 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator { val module = moduleRef.getOrInitializeModule(project, baseDir).also { thisLogger().debug { "Module: $it" } } - StartupManager.getInstance(project).runWhenProjectIsInitialized { - PyPackageCoroutine.launch(project) { - if (module.isDisposed) return@launch - val sdkInfos = findSuitableCreateSdkInfos(module) - withBackgroundProgress(project, PySdkBundle.message("python.configuring.interpreter.progress"), true) { - val lifetime = suppressTipAndInspectionsFor(module, "all suitable extensions") - lifetime.use { configureSdk(project, module, sdkInfos) } + StartupManager.getInstance(project).runWhenProjectIsInitialized(object : Runnable, DumbAware { + override fun run() { + if (module.isDisposed) return + service().coroutineScope.launch { + val sdkInfos = findSuitableCreateSdkInfos(module) + withBackgroundProgress(project, PySdkBundle.message("python.configuring.interpreter.progress"), true) { + val lifetime = suppressTipAndInspectionsFor(module, "all suitable extensions") + lifetime.use { configureSdk(project, module, sdkInfos) } + } } } } + ) } private suspend fun findSuitableCreateSdkInfos(module: Module): List = withContext(Dispatchers.Default) { @@ -262,3 +270,6 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator { return ProjectRootManager.getInstance(ProjectManager.getInstance().defaultProject).projectSdk?.takeIf { it.sdkType is PythonSdkType } } } + +@Service +private class MyCoroutineScopeProvider(val coroutineScope: CoroutineScope)