mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
PY-76147: Do not call sync tasks on pure EDT.
Use coroutines instead GitOrigin-RevId: 447a28ae363f88b575b148b2dea931e09f6a4741
This commit is contained in:
committed by
intellij-monorepo-bot
parent
63b2359362
commit
24be5efa81
@@ -31,5 +31,6 @@
|
||||
<orderEntry type="library" name="jackson" level="project" />
|
||||
<orderEntry type="library" name="jackson-databind" level="project" />
|
||||
<orderEntry type="library" name="jackson-module-kotlin" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.ide.progress" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1,10 +1,15 @@
|
||||
package com.jetbrains.python.sdk.flavors
|
||||
|
||||
import com.intellij.execution.target.TargetEnvironmentConfiguration
|
||||
import com.intellij.platform.ide.progress.ModalTaskOwner
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
|
||||
import com.intellij.util.concurrency.annotations.RequiresEdt
|
||||
import com.jetbrains.python.pathValidation.PlatformAndRoot.Companion.getPlatformAndRoot
|
||||
import com.jetbrains.python.pathValidation.ValidationRequest
|
||||
import com.jetbrains.python.pathValidation.validateExecutableFile
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
@@ -13,4 +18,12 @@ import org.jetbrains.annotations.NonNls
|
||||
*/
|
||||
@RequiresBackgroundThread
|
||||
internal fun getFileExecutionError(@NonNls fullPath: String, targetEnvConfig: TargetEnvironmentConfiguration?): @Nls String? =
|
||||
validateExecutableFile(ValidationRequest(fullPath, platformAndRoot = targetEnvConfig.getPlatformAndRoot()))?.message
|
||||
validateExecutableFile(ValidationRequest(fullPath, platformAndRoot = targetEnvConfig.getPlatformAndRoot()))?.message
|
||||
|
||||
@RequiresEdt
|
||||
internal fun getFileExecutionErrorOnEdt(@NonNls fullPath: String, targetEnvConfig: TargetEnvironmentConfiguration?): @Nls String? =
|
||||
runWithModalProgressBlocking(ModalTaskOwner.guess(), "...") {
|
||||
withContext(Dispatchers.IO) {
|
||||
getFileExecutionError(fullPath, targetEnvConfig)
|
||||
}
|
||||
}
|
||||
@@ -10,24 +10,18 @@ import com.intellij.execution.target.TargetEnvironmentConfiguration;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.SdkAdditionalData;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.PatternUtil;
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PySdkBundle;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.psi.icons.PythonPsiApiIcons;
|
||||
import com.jetbrains.python.run.CommandLinePatcher;
|
||||
import com.jetbrains.python.sdk.*;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -41,6 +35,7 @@ import java.util.regex.Pattern;
|
||||
|
||||
import static com.jetbrains.python.sdk.PythonSdkUtilKtKt.tryResolvePath;
|
||||
import static com.jetbrains.python.sdk.flavors.PySdkFlavorUtilKt.getFileExecutionError;
|
||||
import static com.jetbrains.python.sdk.flavors.PySdkFlavorUtilKt.getFileExecutionErrorOnEdt;
|
||||
|
||||
|
||||
/**
|
||||
@@ -168,7 +163,9 @@ public abstract class PythonSdkFlavor<D extends PyFlavorData> {
|
||||
if (executable != null) {
|
||||
return executable;
|
||||
}
|
||||
var error = getErrorIfNotExecutable(fullPath, targetEnvConfig);
|
||||
var error = SwingUtilities.isEventDispatchThread()
|
||||
? getFileExecutionErrorOnEdt(fullPath, targetEnvConfig)
|
||||
: getFileExecutionError(fullPath, targetEnvConfig);
|
||||
if (error != null) {
|
||||
Logger.getInstance(PythonSdkFlavor.class).warn(String.format("%s is not executable: %s", fullPath, error));
|
||||
}
|
||||
@@ -177,27 +174,6 @@ public abstract class PythonSdkFlavor<D extends PyFlavorData> {
|
||||
return newValue;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Nls
|
||||
private static String getErrorIfNotExecutable(@NotNull String fullPath, @Nullable TargetEnvironmentConfiguration targetEnvConfig) {
|
||||
if (SwingUtilities.isEventDispatchThread()) {
|
||||
// Run under progress
|
||||
// TODO: use pyModalBlocking when we merge two modules
|
||||
return ProgressManager.getInstance()
|
||||
.run(new Task.WithResult<@Nullable @Nls String, RuntimeException>(null, PySdkBundle.message("path.validation.wait.path", fullPath),
|
||||
false) {
|
||||
@Override
|
||||
@Nls
|
||||
@Nullable
|
||||
protected String compute(@NotNull ProgressIndicator indicator) throws RuntimeException {
|
||||
return getFileExecutionError(fullPath, targetEnvConfig);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
return getFileExecutionError(fullPath, targetEnvConfig);
|
||||
}
|
||||
}
|
||||
|
||||
public static void clearExecutablesCache() {
|
||||
ourExecutableFiles.invalidateAll();
|
||||
|
||||
Reference in New Issue
Block a user