mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
work around suspend/legacy api and threading isssues; #PY-77996 fixed
Merge-request: IJ-MR-151488 Merged-by: Ilya Kazakevich <ilya.kazakevich@jetbrains.com> (cherry picked from commit db9e012e187c62fbc53ddfa0c31603eb834058f9) GitOrigin-RevId: 543d11a54e7106bd7f057e930d3796cc76d64617
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1d3e312dd5
commit
2df265c932
@@ -21,11 +21,13 @@ import com.intellij.ui.components.JBLabel
|
||||
import com.intellij.util.ui.JBUI
|
||||
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
|
||||
import com.jetbrains.python.PyBundle
|
||||
import com.jetbrains.python.sdk.*
|
||||
import com.jetbrains.python.sdk.basePath
|
||||
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension
|
||||
import com.jetbrains.python.sdk.poetry.*
|
||||
import com.jetbrains.python.sdk.poetry.ui.PyAddNewPoetryFromFilePanel
|
||||
import com.jetbrains.python.util.runWithModalBlockingOrInBackground
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.awt.BorderLayout
|
||||
@@ -40,23 +42,20 @@ class PyPoetrySdkConfiguration : PyProjectSdkConfigurationExtension {
|
||||
private val LOGGER = Logger.getInstance(PyPoetrySdkConfiguration::class.java)
|
||||
}
|
||||
|
||||
override fun getIntention(module: Module): String? =
|
||||
runWithModalBlockingOrInBackground(module.project, PyBundle.message("python.sdk.validating.environment")) {
|
||||
val toml = findAmongRoots(module, PY_PROJECT_TOML)
|
||||
if (toml == null) {
|
||||
return@runWithModalBlockingOrInBackground null
|
||||
}
|
||||
|
||||
override fun getIntention(module: Module): @IntentionName String? {
|
||||
return runWithModalProgressBlocking(module.project, PyCharmCommunityCustomizationBundle.message("sdk.dialog.title.setting.up.poetry.environment")) {
|
||||
val msg: String? = null
|
||||
val toml = findAmongRoots(module, PY_PROJECT_TOML)
|
||||
if (toml == null) {
|
||||
return@runWithModalProgressBlocking null
|
||||
}
|
||||
val isPoetry = getPyProjectTomlForPoetry(toml) != null
|
||||
if (!isPoetry) {
|
||||
return@runWithModalBlockingOrInBackground null
|
||||
}
|
||||
|
||||
val isPoetry = getPyProjectTomlForPoetry(toml) != null
|
||||
if (!isPoetry) {
|
||||
return@runWithModalProgressBlocking null
|
||||
}
|
||||
|
||||
return@runWithModalProgressBlocking PyCharmCommunityCustomizationBundle.message("sdk.set.up.poetry.environment", toml.name)
|
||||
return@runWithModalBlockingOrInBackground PyCharmCommunityCustomizationBundle.message("sdk.set.up.poetry.environment", toml.name)
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresBackgroundThread
|
||||
override fun createAndAddSdkForConfigurator(module: Module): Sdk? = runBlockingCancellable { createAndAddSDk(module, false) }
|
||||
|
||||
@@ -305,6 +305,7 @@ remote.debug.suspend.on.connect=Suspend after connect
|
||||
python.debug.remote.name=PyRemoteDebug
|
||||
filetype.python.debug.remote.description=Remote debug
|
||||
|
||||
python.sdk.validating.environment=Validating environment
|
||||
python.sdk.getting.remote.interpreter.version=Getting Remote Interpreter Version
|
||||
python.sdk.cannot.evaluate.sdk.version.error.message=Can't evaluate sdk version
|
||||
python.sdk.directory.macro.description=The directory containing the Python interpreter selected for the project
|
||||
|
||||
@@ -4,7 +4,6 @@ package com.jetbrains.python.sdk.poetry.ui
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.progress.runBlockingCancellable
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton
|
||||
import com.intellij.openapi.ui.ValidationInfo
|
||||
import com.intellij.util.ui.FormBuilder
|
||||
@@ -12,6 +11,7 @@ import com.jetbrains.python.PyBundle
|
||||
import com.jetbrains.python.sdk.PythonSdkCoroutineService
|
||||
import com.jetbrains.python.sdk.poetry.getPoetryExecutable
|
||||
import com.jetbrains.python.sdk.poetry.validatePoetryExecutable
|
||||
import com.jetbrains.python.util.runWithModalBlockingOrInBackground
|
||||
import kotlinx.coroutines.launch
|
||||
import java.awt.BorderLayout
|
||||
import java.nio.file.Path
|
||||
@@ -40,7 +40,7 @@ class PyAddNewPoetryFromFilePanel(private val module: Module) : JPanel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun validateAll(): List<ValidationInfo> = runBlockingCancellable {
|
||||
fun validateAll(): List<ValidationInfo> = runWithModalBlockingOrInBackground(module.project, PyBundle.message("python.sdk.validating.environment")) {
|
||||
listOfNotNull(validatePoetryExecutable(Path.of(poetryPathField.text)))
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.jetbrains.python.util
|
||||
|
||||
import com.intellij.openapi.progress.runBlockingCancellable
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import java.awt.EventQueue.isDispatchThread
|
||||
|
||||
// In case legacy sync API can be called from both EDT and background. This wrapper automatically chooses the appropriate way to launch it.
|
||||
fun <T> runWithModalBlockingOrInBackground(project: Project, @NlsSafe msg: String, action: suspend CoroutineScope.() -> T): T {
|
||||
if (isDispatchThread()) {
|
||||
return runWithModalProgressBlocking(project, msg, action)
|
||||
}
|
||||
|
||||
return runBlockingCancellable(action)
|
||||
}
|
||||
Reference in New Issue
Block a user