mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
Revert to directory configurator instead of project listener (PY-39541, PY-39921)
Since it is more clear in what cases the configurator is called and does not lead to overriding interpreter that is going to be created or being created. GitOrigin-RevId: 76854f469f4d1d63763159ba89ab13b0a1c4754b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9738ebdf05
commit
46faf483e5
@@ -7,12 +7,6 @@
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
<application-components>
|
||||
<component>
|
||||
<implementation-class>com.jetbrains.python.PythonSdkConfigurator</implementation-class>
|
||||
</component>
|
||||
</application-components>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationService serviceInterface="com.intellij.lang.IdeLanguageCustomization"
|
||||
serviceImplementation="com.jetbrains.python.PythonIdeLanguageCustomization"
|
||||
@@ -44,6 +38,8 @@
|
||||
key="configurable.BuildoutModulesConfigurable.display.name"
|
||||
instance="com.jetbrains.python.buildout.BuildoutModulesConfigurable"/>
|
||||
|
||||
<directoryProjectConfigurator implementation="com.jetbrains.python.PythonSdkConfigurator" id="sdk"
|
||||
order="after PlatformProjectConfigurator"/>
|
||||
<directoryProjectConfigurator implementation="com.jetbrains.python.PythonSourceRootConfigurator" id="sourceRoot"
|
||||
order="after sdk"/>
|
||||
<directoryProjectConfigurator implementation="com.jetbrains.python.buildout.BuildoutFacetConfigurator" id="buildout"
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.intellij.notification.NotificationAction
|
||||
import com.intellij.notification.NotificationDisplayType
|
||||
import com.intellij.notification.NotificationGroup
|
||||
import com.intellij.notification.NotificationType
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.progress.ProgressIndicator
|
||||
@@ -14,23 +13,23 @@ import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.progress.Task
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
import com.intellij.openapi.project.ProjectManagerListener
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.util.UserDataHolder
|
||||
import com.intellij.openapi.util.UserDataHolderBase
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.DirectoryProjectConfigurator
|
||||
import com.intellij.ui.AppUIUtil
|
||||
import com.jetbrains.python.sdk.*
|
||||
import com.jetbrains.python.sdk.pipenv.detectAndSetupPipEnv
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
|
||||
/**
|
||||
* @author vlan
|
||||
*/
|
||||
class PythonSdkConfigurator {
|
||||
class PythonSdkConfigurator : DirectoryProjectConfigurator {
|
||||
companion object {
|
||||
private val BALLOON_NOTIFICATIONS = NotificationGroup("Python interpreter configuring", NotificationDisplayType.BALLOON, true)
|
||||
|
||||
@@ -79,25 +78,19 @@ class PythonSdkConfigurator {
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
ApplicationManager.getApplication().messageBus.connect().subscribe(ProjectManager.TOPIC, object : ProjectManagerListener {
|
||||
override fun projectOpened(project: Project) {
|
||||
ProgressManager.getInstance().run(
|
||||
object : Task.Backgroundable(project, "Configuring a Python Interpreter", true) {
|
||||
override fun run(indicator: ProgressIndicator) = configureSdk(project, indicator)
|
||||
}
|
||||
)
|
||||
override fun configureProject(project: Project, baseDir: VirtualFile, moduleRef: Ref<Module>, newProject: Boolean) {
|
||||
if (project.pythonSdk != null || newProject) return
|
||||
|
||||
ProgressManager.getInstance().run(
|
||||
object : Task.Backgroundable(project, "Configuring a Python Interpreter", true) {
|
||||
override fun run(indicator: ProgressIndicator) = configureSdk(project, indicator)
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
private fun configureSdk(project: Project, indicator: ProgressIndicator) {
|
||||
indicator.isIndeterminate = true
|
||||
|
||||
if (project.isDefault ||
|
||||
project.pythonSdk != null ||
|
||||
project.basePath.let { it != null && Files.exists(Paths.get(it, Project.DIRECTORY_STORE_FOLDER)) }) return
|
||||
|
||||
val context = UserDataHolderBase()
|
||||
val module = ModuleManager.getInstance(project).modules.firstOrNull() ?: return
|
||||
val existingSdks = ProjectSdksModel().apply { reset(project) }.sdks.filter { it.sdkType is PythonSdkType }
|
||||
|
||||
Reference in New Issue
Block a user