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)