("Pythonid.remoteSdkValidator")
- fun isInvalid(sdk: Sdk) = EP.extensions.any { it.isInvalid(sdk) }
- }
-
- fun isInvalid(sdk: Sdk): Boolean
-}
\ No newline at end of file
diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/PySdkExtensions.kt b/python/python-psi-impl/src/com/jetbrains/python/sdk/PySdkExtensions.kt
index 55115efc32f9..58b8bf1043b0 100644
--- a/python/python-psi-impl/src/com/jetbrains/python/sdk/PySdkExtensions.kt
+++ b/python/python-psi-impl/src/com/jetbrains/python/sdk/PySdkExtensions.kt
@@ -4,6 +4,7 @@ import com.intellij.openapi.editor.Editor
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.psi.PsiDocumentManager
import com.jetbrains.python.psi.PyFile
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
val Editor.pythonSdk: Sdk?
get() {
diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonSdkUtil.java b/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonSdkUtil.java
index 272ef23f8036..cba32b10ddf4 100644
--- a/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonSdkUtil.java
+++ b/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonSdkUtil.java
@@ -1,335 +1,80 @@
package com.jetbrains.python.sdk;
-import com.intellij.ide.plugins.PluginManagerCore;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtilCore;
-import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NlsSafe;
-import com.intellij.openapi.util.SystemInfo;
-import com.intellij.openapi.util.io.FileSystemUtil;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.StandardFileSystems;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.util.ObjectUtils;
-import com.intellij.util.PlatformUtils;
-import com.intellij.util.SlowOperations;
-import com.intellij.util.SystemProperties;
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
-import com.intellij.util.containers.ContainerUtil;
-import com.jetbrains.python.PyNames;
-import com.jetbrains.python.PythonRuntimeService;
-import com.jetbrains.python.codeInsight.typing.PyTypeShed;
-import com.jetbrains.python.module.PyModuleService;
-import com.jetbrains.python.psi.search.PySearchUtilBase;
-import com.jetbrains.python.sdk.skeleton.PySkeletonHeader;
-import com.jetbrains.python.venvReader.VirtualEnvReader;
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil;
import org.jetbrains.annotations.*;
-import java.io.File;
-import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-import java.util.Objects;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import static com.intellij.ide.plugins.PluginManagerCore.ULTIMATE_PLUGIN_ID;
/**
- * Utility methods for Python {@link Sdk} based on the project model and the file system.
- *
- * TODO: Extract SDK "flavor" specific methods into a "Python SDK provider" so that each SDK flavor can be defined independently
- *
- * @see PySdkUtil for run-time Python SDK utils
+ * Old API only for external usages, non-deprecated yet because there is no alternative API.
*/
+@SuppressWarnings("unused")
public final class PythonSdkUtil {
- public static final String REMOTE_SOURCES_DIR_NAME = "remote_sources";
- /**
- * Name of directory where skeleton files (despite the value) are stored.
- */
- public static final String SKELETON_DIR_NAME = "python_stubs";
- /**
- * In which root type built-in skeletons are put.
- */
- public static final OrderRootType BUILTIN_ROOT_TYPE = OrderRootType.CLASSES;
- static final String[] WINDOWS_EXECUTABLE_SUFFIXES = {"cmd", "exe", "bat", "com"};
- private static final Predicate REMOTE_SDK_PREDICATE = PythonSdkUtil::isRemote;
-
- private static final Key CACHED_SKELETON_HEADER = Key.create("CACHED_SKELETON_HEADER");
+ public static final String REMOTE_SOURCES_DIR_NAME = com.jetbrains.python.sdk.legacy.PythonSdkUtil.REMOTE_SOURCES_DIR_NAME;
+ public static final String SKELETON_DIR_NAME = com.jetbrains.python.sdk.legacy.PythonSdkUtil.SKELETON_DIR_NAME;
+ public static final OrderRootType BUILTIN_ROOT_TYPE = com.jetbrains.python.sdk.legacy.PythonSdkUtil.BUILTIN_ROOT_TYPE;
public static boolean isPythonSdk(@NotNull Sdk sdk) {
- return isPythonSdk(sdk, false);
- }
-
- @ApiStatus.Internal
- public static boolean isPythonSdk(@NotNull Sdk sdk, boolean allowRemoteInFreeTier) {
- if (!PyNames.PYTHON_SDK_ID_NAME.equals(sdk.getSdkType().getName())) {
- return false;
- }
-
- // PY-79923: Should explicitly filter sdks created while pro was active
- if (isFreeTier()) {
- return allowRemoteInFreeTier || (!isRemote(sdk));
- }
-
- return true;
- }
-
- /**
- * @return PyCharm with Pro mode disabled
- */
- @ApiStatus.Internal
- public static boolean isFreeTier() {
- return PlatformUtils.isPyCharm() && (!PlatformUtils.isDataSpell()) && PluginManagerCore.isDisabled(ULTIMATE_PLUGIN_ID);
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isPythonSdk(sdk);
}
public static @Unmodifiable @NotNull List<@NotNull Sdk> getAllSdks() {
- return getAllSdks(false);
- }
-
- @ApiStatus.Internal
- public static @Unmodifiable @NotNull List<@NotNull Sdk> getAllSdks(boolean allowRemoteInFreeTier) {
- return ContainerUtil.filter(ProjectJdkTable.getInstance().getAllJdks(), sdk -> isPythonSdk(sdk, allowRemoteInFreeTier));
- }
-
- private static @Nullable PySkeletonHeader readSkeletonHeader(@NotNull VirtualFile file, @NotNull Sdk pythonSdk) {
- final VirtualFile skeletonsDir = findSkeletonsDir(pythonSdk);
- if (skeletonsDir != null && VfsUtilCore.isAncestor(skeletonsDir, file, false)) {
- PySkeletonHeader skeletonHeader = file.getUserData(CACHED_SKELETON_HEADER);
- if (skeletonHeader == null) {
- skeletonHeader = PySkeletonHeader.readSkeletonHeader(VfsUtilCore.virtualToIoFile(file));
- file.putUserData(CACHED_SKELETON_HEADER, skeletonHeader);
- }
- return skeletonHeader;
- }
- return null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getAllSdks();
}
public static boolean isStdLib(@NotNull VirtualFile vFile, @Nullable Sdk pythonSdk) {
- if (pythonSdk != null) {
- @Nullable VirtualFile originFile = vFile;
- @NotNull String originPath = vFile.getPath();
- boolean checkOnRemoteFS = false;
- // All binary skeletons are collected under the same root regardless of their original location.
- // Because of that we need to use paths to the corresponding binary modules recorded in their headers.
- final PySkeletonHeader header = readSkeletonHeader(originFile, pythonSdk);
- if (header != null) {
- // Binary module paths in skeleton headers of Mock SDK don't map to actual physical files.
- // Fallback to the old heuristic for these stubs.
- if (ApplicationManager.getApplication().isUnitTestMode() &&
- Objects.equals(vFile.getParent(), findSkeletonsDir(pythonSdk))) {
- return true;
- }
-
- final String binaryPath = header.getBinaryFile();
- // XXX Assume that all pre-generated stubs belong to the interpreter's stdlib -- might change in future with PY-32229
- if (binaryPath.equals(PySkeletonHeader.BUILTIN_NAME) || binaryPath.equals(PySkeletonHeader.PREGENERATED)) {
- return true;
- }
- if (isRemote(pythonSdk)) {
- checkOnRemoteFS = true;
- // Actual file is on remote file system and not available
- originFile = null;
- }
- else {
- originFile = VfsUtil.findFileByIoFile(new File(binaryPath), true);
- }
- originPath = binaryPath;
- }
- if (originFile != null) {
- originFile = ObjectUtils.notNull(originFile.getCanonicalFile(), originFile);
- originPath = originFile.getPath();
- }
-
- final VirtualFile libDir = PySearchUtilBase.findLibDir(pythonSdk);
- if (libDir != null && isUnderLibDirButNotSitePackages(originFile, originPath, libDir, pythonSdk, checkOnRemoteFS)) {
- return true;
- }
- final VirtualFile venvLibDir = PySearchUtilBase.findVirtualEnvLibDir(pythonSdk);
- if (venvLibDir != null && isUnderLibDirButNotSitePackages(originFile, originPath, venvLibDir, pythonSdk, checkOnRemoteFS)) {
- return true;
- }
- if (PyTypeShed.INSTANCE.isInStandardLibrary(vFile)) {
- return true;
- }
- }
- return false;
+ return PySkeletonUtil.isStdLib(vFile, pythonSdk);
}
public static @Nullable Sdk findPythonSdk(@Nullable Module module) {
- if (module == null || module.isDisposed()) {
- return null;
- }
-
- Sdk sdk = ModuleRootManager.getInstance(module).getSdk();
- if (sdk != null && isPythonSdk(sdk)) {
- return sdk;
- }
-
- sdk = PyModuleService.getInstance().findPythonSdk(module);
- if (sdk != null && isPythonSdk(sdk)) {
- return sdk;
- }
-
- return null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.findPythonSdk(module);
}
- /**
- * Checks if SDK is legacy remote or remote bases on targets.
- * Never assume {@link Sdk#getSdkAdditionalData()} has certain type if this method returns true.
- * In most cases you are encouraged to obtain additional data and check it explicitly
- */
public static boolean isRemote(@Nullable Sdk sdk) {
- return sdk != null && sdk.getSdkAdditionalData() instanceof PyRemoteSdkAdditionalDataMarker;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote(sdk);
}
public static @NlsSafe String getUserSite() {
- if (SystemInfo.isWindows) {
- final String appdata = System.getenv("APPDATA");
- return appdata + File.separator + "Python";
- }
- else {
- final String userHome = SystemProperties.getUserHome();
- return userHome + File.separator + ".local";
- }
- }
-
- public static boolean isFileInSkeletons(final @NotNull VirtualFile virtualFile, @NotNull Sdk sdk) {
- final VirtualFile skeletonsDir = findSkeletonsDir(sdk);
- return skeletonsDir != null && VfsUtilCore.isAncestor(skeletonsDir, virtualFile, false);
- }
-
- public static boolean isElementInSkeletons(final @NotNull PsiElement element) {
- final PsiFile file = element.getContainingFile();
- if (file != null) {
- final VirtualFile virtualFile = file.getVirtualFile();
- if (virtualFile != null) {
- final Sdk sdk = findPythonSdk(element);
- if (sdk != null && isFileInSkeletons(virtualFile, sdk)) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Returns skeletons location on the local machine. Independent of SDK credentials type (e.g. ssh, Vagrant, Docker or else).
- */
- public static @NotNull String getSkeletonsPath(String basePath, String sdkHome) {
- String sep = File.separator;
- return getSkeletonsRootPath(basePath) + sep + FileUtil.toSystemIndependentName(sdkHome).hashCode() + sep;
- }
-
- public static @Nullable String getSkeletonsPath(@NotNull Sdk sdk) {
- String path = sdk.getHomePath();
- return path != null ? getSkeletonsPath(PathManager.getSystemPath(), path) : null;
- }
-
- public static @NotNull String getSkeletonsRootPath(String basePath) {
- return basePath + File.separator + SKELETON_DIR_NAME;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getUserSite();
}
public static @Nullable VirtualFile findSkeletonsDir(final @NotNull Sdk sdk) {
- return findLibraryDir(sdk, SKELETON_DIR_NAME, BUILTIN_ROOT_TYPE);
- }
-
- public static @Nullable VirtualFile findAnyRemoteLibrary(final @NotNull Sdk sdk) {
- return findLibraryDir(sdk, REMOTE_SOURCES_DIR_NAME, OrderRootType.CLASSES);
- }
-
- private static VirtualFile findLibraryDir(Sdk sdk, String dirName, OrderRootType rootType) {
- final VirtualFile[] virtualFiles = sdk.getRootProvider().getFiles(rootType);
- for (VirtualFile virtualFile : virtualFiles) {
- if (virtualFile.isValid() && virtualFile.getPath().contains(dirName)) {
- return virtualFile;
- }
- }
- return null;
- }
-
- private static @NotNull String mapToRemote(@NotNull String localRoot, @NotNull Sdk sdk) {
- return PythonRuntimeService.getInstance().mapToRemote(localRoot, sdk);
- }
-
- private static boolean isUnderLibDirButNotSitePackages(@Nullable VirtualFile file,
- @NotNull String path,
- @NotNull VirtualFile libDir,
- @NotNull Sdk sdk,
- boolean checkOnRemoteFS) {
- final VirtualFile originLibDir;
- final String originLibDirPath;
- if (checkOnRemoteFS) {
- originLibDir = libDir;
- originLibDirPath = mapToRemote(originLibDir.getPath(), sdk);
- }
- else {
- // Normalize the path to the lib directory on local FS
- originLibDir = ObjectUtils.notNull(libDir.getCanonicalFile(), libDir);
- originLibDirPath = originLibDir.getPath();
- }
-
- // This check is more brittle and thus used as a fallback measure
- if (checkOnRemoteFS || file == null) {
- final String normalizedLidDirPath = FileUtil.toSystemIndependentName(originLibDirPath);
- final String sitePackagesPath = normalizedLidDirPath + "/" + PyNames.SITE_PACKAGES;
- final String normalizedPath = FileUtil.toSystemIndependentName(path);
- return FileUtil.startsWith(normalizedPath, normalizedLidDirPath) && !FileUtil.startsWith(normalizedPath, sitePackagesPath);
- }
- else if (VfsUtilCore.isAncestor(originLibDir, file, false)) {
- final VirtualFile sitePackagesDir = originLibDir.findChild(PyNames.SITE_PACKAGES);
- return sitePackagesDir == null || !VfsUtilCore.isAncestor(sitePackagesDir, file, false);
- }
- return false;
- }
-
- public static boolean hasValidSdk() {
- for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
- if (isPythonSdk(sdk)) {
- return true;
- }
- }
- return false;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.findSkeletonsDir(sdk);
}
/**
- * @deprecated use PySdkExt.isValid
+ * @deprecated use PySdkExt.isSdkSeemsValid
*/
- @Deprecated
+ @Deprecated(forRemoval = true)
public static boolean isInvalid(@NotNull Sdk sdk) {
if (isRemote(sdk)) {
- return PyRemoteSdkValidator.Companion.isInvalid(sdk);
+ return true;
}
final VirtualFile interpreter = sdk.getHomeDirectory();
return interpreter == null || !interpreter.exists();
}
public static boolean isDisposed(@NotNull Sdk sdk) {
- return sdk instanceof Disposable && Disposer.isDisposed((Disposable)sdk);
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isDisposed(sdk);
}
public static List getAllLocalCPythons() {
- return getAllSdks().stream().filter(REMOTE_SDK_PREDICATE.negate()).collect(Collectors.toList());
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getAllLocalCPythons();
}
// It is only here for external plugins
@RequiresBackgroundThread(generateAssertion = false)
public static @Nullable String getPythonExecutable(@NotNull String rootPath) {
- var python = VirtualEnvReader.getInstance().findPythonInPythonRoot(Path.of(rootPath));
- return (python != null) ? python.toString() : null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getPythonExecutable(rootPath);
}
/**
@@ -338,101 +83,20 @@ public final class PythonSdkUtil {
@Deprecated
@RequiresBackgroundThread(generateAssertion = false)
public static @Nullable String getExecutablePath(final @NotNull String homeDirectory, @NotNull String name) {
- Path path = getExecutablePath(Path.of(homeDirectory), name);
- return (path != null) ? path.toString() : null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getExecutablePath(homeDirectory, name);
}
@RequiresBackgroundThread(generateAssertion = false)
public static @Nullable Path getExecutablePath(@NotNull Path homeDirectory, @NotNull String name) {
- Path binDir = homeDirectory.getParent();
- if (binDir == null) return null;
- Path runner = binDir.resolve(name);
- if (Files.exists(runner)) return runner;
- runner = binDir.resolve("Scripts").resolve(name);
- if (Files.exists(runner)) return runner;
-
- if (binDir.getParent() != null) {
- runner = binDir.getParent().resolve("Scripts").resolve(name);
- if (Files.exists(runner)) return runner;
- runner = binDir.getParent().resolve("local").resolve(name);
- if (Files.exists(runner)) return runner;
- runner = binDir.getParent().resolve("local").resolve("bin").resolve(name);
- if (Files.exists(runner)) return runner;
- }
-
- // if interpreter is a symlink
- String homeDirectoryAbsolutePath = homeDirectory.toAbsolutePath().toString();
- if (FileSystemUtil.isSymLink(homeDirectoryAbsolutePath)) {
- String resolvedPath = FileSystemUtil.resolveSymLink(homeDirectoryAbsolutePath);
- if (resolvedPath != null && !resolvedPath.equals(homeDirectoryAbsolutePath)) {
- return getExecutablePath(Path.of(resolvedPath), name);
- }
- }
- // Search in standard unix path
- runner = Path.of("/usr", "bin", name);
- if (Files.exists(runner)) return runner;
- runner = Path.of("/usr", "local", "bin", name);
- if (Files.exists(runner)) return runner;
- return null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.getExecutablePath(homeDirectory, name);
}
- /**
- * @param binaryPath must point to a Python interpreter
- * @return if the surroundings look like a virtualenv installation, its root is returned (normally the grandparent of binaryPath).
- */
- @RequiresBackgroundThread(generateAssertion = false)
- public static @Nullable File getVirtualEnvRoot(final @NotNull String binaryPath) {
- SlowOperations.assertSlowOperationsAreAllowed();
- final File bin = new File(binaryPath).getParentFile();
- if (bin != null) {
- final String rootPath = bin.getParent();
- if (rootPath != null) {
- final File root = new File(rootPath);
- final File activateThis = new File(bin, "activate_this.py");
- // binaryPath should contain an 'activate' script, and root should have bin (with us) and include and libp
- if (activateThis.exists()) {
- final File activate = findExecutableFile(bin, "activate");
- if (activate != null) {
- return root;
- }
- }
- // Python 3.3 virtualenvs can be found as described in PEP 405
- if (new File(root, "pyvenv.cfg").exists()) {
- return root;
- }
- }
- }
- return null;
- }
-
- /**
- * Finds a file that looks executable: an .exe or .cmd under windows, plain file under *nix.
- *
- * @param parent directory to look at
- * @param name name of the executable without suffix
- * @return File representing the executable, or null.
- */
- public static @Nullable File findExecutableFile(File parent, String name) {
- if (SystemInfo.isWindows) {
- for (String suffix : WINDOWS_EXECUTABLE_SUFFIXES) {
- File file = new File(parent, name + "." + suffix);
- if (file.exists()) return file;
- }
- }
- else if (SystemInfo.isUnix) {
- File file = new File(parent, name);
- if (file.exists()) return file;
- }
- return null;
- }
-
-
public static @Nullable Sdk findSdkByKey(@NotNull String key) {
- return ProjectJdkTable.getInstance().findJdk(key);
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.findSdkByKey(key);
}
public static @Nullable Sdk findPythonSdk(final @NotNull PsiElement element) {
- return findPythonSdk(ModuleUtilCore.findModuleForPsiElement(element));
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.findPythonSdk(element);
}
/**
@@ -440,28 +104,10 @@ public final class PythonSdkUtil {
*/
@Deprecated
public static @Nullable Sdk findSdkByPath(@Nullable String path) {
- if (path != null) {
- return findSdkByPath(getAllSdks(), path);
- }
- return null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.findSdkByPath(path);
}
- /**
- * @deprecated path is not unique, use {@link #findSdkByKey(String)} instead
- */
- @Deprecated
- public static @Nullable Sdk findSdkByPath(List extends Sdk> sdkList, @Nullable String path) {
- if (path != null) {
- for (Sdk sdk : sdkList) {
- if (sdk != null && FileUtil.pathsEqual(path, sdk.getHomePath())) {
- return sdk;
- }
- }
- }
- return null;
- }
-
/**
* Returns the "site-packages" directory that is going to be used for installing new packages with {@code pip}.
*
@@ -472,49 +118,22 @@ public final class PythonSdkUtil {
* "site-packages" at all, and this method returns {@code null} accordingly in this case.
*/
public static @Nullable VirtualFile getSitePackagesDirectory(@NotNull Sdk pythonSdk) {
- final VirtualFile libDir;
- if (isVirtualEnv(pythonSdk)) {
- libDir = PySearchUtilBase.findVirtualEnvLibDir(pythonSdk);
- }
- else {
- libDir = PySearchUtilBase.findLibDir(pythonSdk);
- }
- return libDir != null ? libDir.findChild(PyNames.SITE_PACKAGES) : null;
+ return PySkeletonUtil.getSitePackagesDirectory(pythonSdk);
}
@RequiresBackgroundThread(generateAssertion = false)
public static boolean isVirtualEnv(@NotNull Sdk sdk) {
- final String path = sdk.getHomePath();
- return isVirtualEnv(path);
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isVirtualEnv(sdk);
}
@Contract("null -> false")
public static boolean isVirtualEnv(@Nullable String path) {
- return path != null && getVirtualEnvRoot(path) != null;
- }
-
- @RequiresBackgroundThread(generateAssertion = false)
- public static @Nullable VirtualFile getCondaDirectory(@NotNull Sdk sdk) {
- final VirtualFile homeDirectory = sdk.getHomeDirectory();
- if (homeDirectory == null) return null;
- if (SystemInfo.isWindows) return homeDirectory.getParent();
- return homeDirectory.getParent().getParent();
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isVirtualEnv(path);
}
@RequiresBackgroundThread(generateAssertion = false)
public static boolean isCondaVirtualEnv(@NotNull Sdk sdk) {
- return isCondaVirtualEnv(sdk.getHomePath());
- }
-
- @RequiresBackgroundThread(generateAssertion = false)
- public static boolean isCondaVirtualEnv(@Nullable String sdkPath) {
- SlowOperations.assertSlowOperationsAreAllowed();
- final VirtualFile condaMeta = findCondaMeta(sdkPath);
- if (condaMeta == null) {
- return false;
- }
- final VirtualFile envs = condaMeta.getParent().findChild("envs");
- return envs == null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isCondaVirtualEnv(sdk);
}
/**
@@ -523,54 +142,6 @@ public final class PythonSdkUtil {
@Deprecated
// Conda virtual environment and base conda
public static boolean isConda(@NotNull Sdk sdk) {
- return isConda(sdk.getHomePath());
- }
-
- /**
- * @deprecated flavour instead
- */
- @Deprecated
- public static boolean isConda(@Nullable String sdkPath) {
- return findCondaMeta(sdkPath) != null;
- }
-
- /**
- * @deprecated flavour instead
- */
- @Deprecated
- public static boolean isBaseConda(@Nullable String sdkPath) {
- final VirtualFile condaMeta = findCondaMeta(sdkPath);
- if (condaMeta == null) {
- return false;
- }
- final VirtualFile parent = condaMeta.getParent();
- if (parent == null) {
- return false;
- }
- final VirtualFile condaBin = parent.findChild("condabin");
- if (condaBin != null) {
- return true;
- }
- return parent.findChild("envs") != null;
- }
-
- @RequiresBackgroundThread(generateAssertion = false)
- @ApiStatus.Internal
- public static @Nullable VirtualFile findCondaMeta(@Nullable String sdkPath) {
- SlowOperations.assertSlowOperationsAreAllowed();
- if (sdkPath == null || CustomSdkHomePattern.isCustomPythonSdkHomePath(sdkPath)) {
- return null;
- }
- final VirtualFile homeDirectory = StandardFileSystems.local().findFileByPath(sdkPath);
- if (homeDirectory == null) {
- return null;
- }
- VirtualFile parentDirectory = homeDirectory.getParent();
- if (parentDirectory == null) {
- return null;
- }
- final VirtualFile condaParent = SystemInfo.isWindows ? parentDirectory
- : parentDirectory.getParent();
- return condaParent != null ? condaParent.findChild("conda-meta") : null;
+ return com.jetbrains.python.sdk.legacy.PythonSdkUtil.isConda(sdk);
}
}
diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/skeleton/PySkeletonUtil.java b/python/python-psi-impl/src/com/jetbrains/python/sdk/skeleton/PySkeletonUtil.java
new file mode 100644
index 000000000000..7ed32d44b82f
--- /dev/null
+++ b/python/python-psi-impl/src/com/jetbrains/python/sdk/skeleton/PySkeletonUtil.java
@@ -0,0 +1,162 @@
+package com.jetbrains.python.sdk.skeleton;
+
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.vfs.VfsUtil;
+import com.intellij.openapi.vfs.VfsUtilCore;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.ObjectUtils;
+import com.jetbrains.python.PyNames;
+import com.jetbrains.python.PythonRuntimeService;
+import com.jetbrains.python.codeInsight.typing.PyTypeShed;
+import com.jetbrains.python.psi.impl.PyBuiltinCache;
+import com.jetbrains.python.psi.search.PySearchUtilBase;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.File;
+import java.util.Objects;
+
+import static com.jetbrains.python.sdk.PySdkUtil.getLanguageLevelForSdk;
+import static com.jetbrains.python.sdk.legacy.PythonSdkUtil.*;
+
+/**
+ * Skeleton logic from the original [com.jetbrains.python.sdk.PythonSdkUtil]
+ */
+@ApiStatus.Internal
+public final class PySkeletonUtil {
+ private static final Key CACHED_SKELETON_HEADER = Key.create("CACHED_SKELETON_HEADER");
+
+ private static @Nullable PySkeletonHeader readSkeletonHeader(@NotNull VirtualFile file, @NotNull Sdk pythonSdk) {
+ final VirtualFile skeletonsDir = findSkeletonsDir(pythonSdk);
+ if (skeletonsDir != null && VfsUtilCore.isAncestor(skeletonsDir, file, false)) {
+ PySkeletonHeader skeletonHeader = file.getUserData(CACHED_SKELETON_HEADER);
+ if (skeletonHeader == null) {
+ skeletonHeader = PySkeletonHeader.readSkeletonHeader(VfsUtilCore.virtualToIoFile(file));
+ file.putUserData(CACHED_SKELETON_HEADER, skeletonHeader);
+ }
+ return skeletonHeader;
+ }
+ return null;
+ }
+
+ /**
+ * Returns the "site-packages" directory that is going to be used for installing new packages with {@code pip}.
+ *
+ * Note that on a virtual env there might be two such directories in {@code sys.path} depending on whether
+ * the option "--system-site-packages" was given during its creation. Then the one inside the actual virtual
+ * env tree will be returned, as it's the one used to install new packages.
+ * Also, on some systems, first of all in system distributions of Python on Linux, there might be no
+ * "site-packages" at all, and this method returns {@code null} accordingly in this case.
+ */
+ public static @Nullable VirtualFile getSitePackagesDirectory(@NotNull Sdk pythonSdk) {
+ final VirtualFile libDir;
+ if (isVirtualEnv(pythonSdk)) {
+ libDir = PySearchUtilBase.findVirtualEnvLibDir(pythonSdk);
+ }
+ else {
+ libDir = PySearchUtilBase.findLibDir(pythonSdk);
+ }
+ return libDir != null ? libDir.findChild(PyNames.SITE_PACKAGES) : null;
+ }
+
+ public static boolean isStdLib(@NotNull VirtualFile vFile, @Nullable Sdk pythonSdk) {
+ if (pythonSdk != null) {
+ @Nullable VirtualFile originFile = vFile;
+ @NotNull String originPath = vFile.getPath();
+ boolean checkOnRemoteFS = false;
+ // All binary skeletons are collected under the same root regardless of their original location.
+ // Because of that we need to use paths to the corresponding binary modules recorded in their headers.
+ final PySkeletonHeader header = readSkeletonHeader(originFile, pythonSdk);
+ if (header != null) {
+ // Binary module paths in skeleton headers of Mock SDK don't map to actual physical files.
+ // Fallback to the old heuristic for these stubs.
+ if (ApplicationManager.getApplication().isUnitTestMode() &&
+ Objects.equals(vFile.getParent(), findSkeletonsDir(pythonSdk))) {
+ return true;
+ }
+
+ final String binaryPath = header.getBinaryFile();
+ // XXX Assume that all pre-generated stubs belong to the interpreter's stdlib -- might change in future with PY-32229
+ if (binaryPath.equals(PySkeletonHeader.BUILTIN_NAME) || binaryPath.equals(PySkeletonHeader.PREGENERATED)) {
+ return true;
+ }
+ if (isRemote(pythonSdk)) {
+ checkOnRemoteFS = true;
+ // Actual file is on remote file system and not available
+ originFile = null;
+ }
+ else {
+ originFile = VfsUtil.findFileByIoFile(new File(binaryPath), true);
+ }
+ originPath = binaryPath;
+ }
+ if (originFile != null) {
+ originFile = ObjectUtils.notNull(originFile.getCanonicalFile(), originFile);
+ originPath = originFile.getPath();
+ }
+
+ final VirtualFile libDir = PySearchUtilBase.findLibDir(pythonSdk);
+ if (libDir != null && isUnderLibDirButNotSitePackages(originFile, originPath, libDir, pythonSdk, checkOnRemoteFS)) {
+ return true;
+ }
+ final VirtualFile venvLibDir = PySearchUtilBase.findVirtualEnvLibDir(pythonSdk);
+ if (venvLibDir != null && isUnderLibDirButNotSitePackages(originFile, originPath, venvLibDir, pythonSdk, checkOnRemoteFS)) {
+ return true;
+ }
+ if (PyTypeShed.INSTANCE.isInStandardLibrary(vFile)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isUnderLibDirButNotSitePackages(@Nullable VirtualFile file,
+ @NotNull String path,
+ @NotNull VirtualFile libDir,
+ @NotNull Sdk sdk,
+ boolean checkOnRemoteFS) {
+ final VirtualFile originLibDir;
+ final String originLibDirPath;
+ if (checkOnRemoteFS) {
+ originLibDir = libDir;
+ originLibDirPath = mapToRemote(originLibDir.getPath(), sdk);
+ }
+ else {
+ // Normalize the path to the lib directory on local FS
+ originLibDir = ObjectUtils.notNull(libDir.getCanonicalFile(), libDir);
+ originLibDirPath = originLibDir.getPath();
+ }
+
+ // This check is more brittle and thus used as a fallback measure
+ if (checkOnRemoteFS || file == null) {
+ final String normalizedLidDirPath = FileUtil.toSystemIndependentName(originLibDirPath);
+ final String sitePackagesPath = normalizedLidDirPath + "/" + PyNames.SITE_PACKAGES;
+ final String normalizedPath = FileUtil.toSystemIndependentName(path);
+ return FileUtil.startsWith(normalizedPath, normalizedLidDirPath) && !FileUtil.startsWith(normalizedPath, sitePackagesPath);
+ }
+ else if (VfsUtilCore.isAncestor(originLibDir, file, false)) {
+ final VirtualFile sitePackagesDir = originLibDir.findChild(PyNames.SITE_PACKAGES);
+ return sitePackagesDir == null || !VfsUtilCore.isAncestor(sitePackagesDir, file, false);
+ }
+ return false;
+ }
+
+ private static @NotNull String mapToRemote(@NotNull String localRoot, @NotNull Sdk sdk) {
+ return PythonRuntimeService.getInstance().mapToRemote(localRoot, sdk);
+ }
+ /**
+ * @return name of builtins skeleton file; for Python 2.x it is '{@code __builtins__.py}'.
+ */
+
+
+ @ApiStatus.Internal
+ public static @NotNull @NonNls String getBuiltinsFileName(@NotNull Sdk sdk) {
+ return PyBuiltinCache.getBuiltinsFileName(getLanguageLevelForSdk(sdk));
+ }
+}
+
diff --git a/python/python-psi-impl/src/com/jetbrains/python/validation/PyAssignTargetAnnotatorVisitor.java b/python/python-psi-impl/src/com/jetbrains/python/validation/PyAssignTargetAnnotatorVisitor.java
index a97930dc4a68..b4ae6d0079ee 100644
--- a/python/python-psi-impl/src/com/jetbrains/python/validation/PyAssignTargetAnnotatorVisitor.java
+++ b/python/python-psi-impl/src/com/jetbrains/python/validation/PyAssignTargetAnnotatorVisitor.java
@@ -26,7 +26,7 @@ import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyPsiUtils;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonPreviewProvider.kt b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonPreviewProvider.kt
index dcc19055a938..98942c4e1dff 100644
--- a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonPreviewProvider.kt
+++ b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonPreviewProvider.kt
@@ -9,7 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PythonHelper.REST_RUNNER
import com.jetbrains.python.sdk.PySdkUtil
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal fun toHtml(text: String, virtualFile: VirtualFile, project: Project): Pair? {
val module = ApplicationManager.getApplication().runReadAction {
diff --git a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonUtil.kt b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonUtil.kt
index a0e9f121553b..bc3163390032 100644
--- a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonUtil.kt
+++ b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/RestPythonUtil.kt
@@ -8,7 +8,7 @@ import com.intellij.openapi.actionSystem.Presentation
import com.intellij.openapi.module.ModuleManager.Companion.getInstance
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.management.hasInstalledPackageSnapshot
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
/**
* User : catherine
diff --git a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/SphinxBaseCommand.java b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/SphinxBaseCommand.java
index 500e95df6ddf..d6244e2f6c57 100644
--- a/python/python-restructuredtext/src/com/intellij/restructuredtext/python/SphinxBaseCommand.java
+++ b/python/python-restructuredtext/src/com/intellij/restructuredtext/python/SphinxBaseCommand.java
@@ -27,7 +27,7 @@ import com.jetbrains.python.run.PythonProcessRunner;
import com.jetbrains.python.run.PythonTracebackFilter;
import com.jetbrains.python.sdk.PythonEnvUtil;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/python-sdk-ui/BUILD.bazel b/python/python-sdk-ui/BUILD.bazel
index e630eeeead4e..294b05167a8d 100644
--- a/python/python-sdk-ui/BUILD.bazel
+++ b/python/python-sdk-ui/BUILD.bazel
@@ -25,7 +25,6 @@ jvm_library(
"//python/openapi:community",
"//python/python-sdk:sdk",
"//python/python-syntax-core:syntax-core",
- "//python/python-psi-impl:psi-impl",
"//libraries/caffeine",
"@lib//:io-github-z4kn4fein-semver-jvm",
"//python/python-exec-service:community-execService",
diff --git a/python/python-sdk-ui/intellij.python.sdk.ui.iml b/python/python-sdk-ui/intellij.python.sdk.ui.iml
index 3727ec0a43e7..0652d46da116 100644
--- a/python/python-sdk-ui/intellij.python.sdk.ui.iml
+++ b/python/python-sdk-ui/intellij.python.sdk.ui.iml
@@ -20,7 +20,6 @@
-
diff --git a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/sdk/EvoModuleSdk.kt b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/sdk/EvoModuleSdk.kt
index 7a85ed694d31..289419f74aec 100644
--- a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/sdk/EvoModuleSdk.kt
+++ b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/sdk/EvoModuleSdk.kt
@@ -3,7 +3,7 @@ package com.intellij.python.sdk.ui.evolution.sdk
import com.intellij.icons.AllIcons
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import javax.swing.Icon
diff --git a/python/python-sdk/BUILD.bazel b/python/python-sdk/BUILD.bazel
index 1ff5e3ad59d1..43d3fd7555d5 100644
--- a/python/python-sdk/BUILD.bazel
+++ b/python/python-sdk/BUILD.bazel
@@ -34,7 +34,6 @@ jvm_library(
"//platform/platform-util-io:ide-util-io",
"//python/openapi:community",
"//python/python-psi-api:psi",
- "//python/python-psi-impl:psi-impl",
"//platform/projectModel-impl",
"//platform/util/jdom",
"//platform/ide-core",
@@ -74,7 +73,6 @@ jvm_library(
"//python/openapi:community",
"//python/openapi:community_test_lib",
"//python/python-psi-api:psi",
- "//python/python-psi-impl:psi-impl",
"//platform/projectModel-impl",
"//platform/util/jdom",
"//platform/ide-core",
diff --git a/python/python-sdk/intellij.python.sdk.iml b/python/python-sdk/intellij.python.sdk.iml
index ad1dc8d20fb2..4eb69c72229d 100644
--- a/python/python-sdk/intellij.python.sdk.iml
+++ b/python/python-sdk/intellij.python.sdk.iml
@@ -24,7 +24,6 @@
-
diff --git a/python/python-sdk/resources/intellij.python.sdk.xml b/python/python-sdk/resources/intellij.python.sdk.xml
index b84b4a344fe0..b8f226d1164f 100644
--- a/python/python-sdk/resources/intellij.python.sdk.xml
+++ b/python/python-sdk/resources/intellij.python.sdk.xml
@@ -1,6 +1,5 @@
-
diff --git a/python/python-sdk/src/com/jetbrains/python/packaging/CondaExecutablesLocator.kt b/python/python-sdk/src/com/jetbrains/python/packaging/CondaExecutablesLocator.kt
index 59b1a21421b3..bb1512cf0000 100644
--- a/python/python-sdk/src/com/jetbrains/python/packaging/CondaExecutablesLocator.kt
+++ b/python/python-sdk/src/com/jetbrains/python/packaging/CondaExecutablesLocator.kt
@@ -7,7 +7,7 @@ import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.SystemInfo
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.util.SystemProperties
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import org.jetbrains.annotations.ApiStatus
import java.nio.file.Files
import java.nio.file.Path
diff --git a/python/python-sdk/src/com/jetbrains/python/run/PyVirtualEnvReader.kt b/python/python-sdk/src/com/jetbrains/python/run/PyVirtualEnvReader.kt
index 623bee5cd3cc..406f833264eb 100644
--- a/python/python-sdk/src/com/jetbrains/python/run/PyVirtualEnvReader.kt
+++ b/python/python-sdk/src/com/jetbrains/python/run/PyVirtualEnvReader.kt
@@ -6,7 +6,7 @@ import com.intellij.openapi.util.SystemInfo
import com.intellij.util.EnvironmentUtil
import com.intellij.util.ShellEnvironmentReader
import com.jetbrains.python.packaging.PyCondaPackageService
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkAdditionalDataMarker.java b/python/python-sdk/src/com/jetbrains/python/sdk/PyRemoteSdkAdditionalDataMarker.java
similarity index 100%
rename from python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkAdditionalDataMarker.java
rename to python/python-sdk/src/com/jetbrains/python/sdk/PyRemoteSdkAdditionalDataMarker.java
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkCoreTools.kt b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkCoreTools.kt
index 34a9f3bab328..1e1f13852b28 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkCoreTools.kt
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkCoreTools.kt
@@ -16,6 +16,8 @@ import org.jetbrains.annotations.ApiStatus.Internal
@Internal
fun Sdk.getOrCreateAdditionalData(): PythonSdkAdditionalData {
+ requirePythonSdk()
+
val existingData = sdkAdditionalData as? PythonSdkAdditionalData
if (existingData != null) {
return existingData
@@ -51,6 +53,8 @@ fun Sdk.getOrCreateAdditionalData(): PythonSdkAdditionalData {
@Internal
suspend fun Sdk.persist(): Unit = edtWriteAction {
+ requirePythonSdk()
+
if (ProjectJdkTable.getInstance().findJdk(name) == null) { // Saving 2 SDKs with same name is an error
getOrCreateAdditionalData() // additional data is always required
ProjectJdkTable.getInstance().addJdk(this)
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java
index 2459122f8c0f..34a2a7e1284c 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java
@@ -23,10 +23,10 @@ import com.intellij.util.EnvironmentUtil;
import com.intellij.util.ObjectUtils;
import com.jetbrains.python.sdk.impl.PySdkBundle;
import com.jetbrains.python.psi.LanguageLevel;
-import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.run.CommandLinePatcher;
import com.jetbrains.python.run.PyVirtualEnvReader;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.*;
import javax.swing.*;
@@ -251,16 +251,6 @@ public final class PySdkUtil {
return LanguageLevel.getDefault();
}
- /**
- * @return name of builtins skeleton file; for Python 2.x it is '{@code __builtins__.py}'.
- */
-
-
- @ApiStatus.Internal
- public static @NotNull @NonNls String getBuiltinsFileName(@NotNull Sdk sdk) {
- return PyBuiltinCache.getBuiltinsFileName(getLanguageLevelForSdk(sdk));
- }
-
/**
* Finds sdk for provided directory. Takes into account both project and module SDK
*
diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonEnvUtil.java b/python/python-sdk/src/com/jetbrains/python/sdk/PythonEnvUtil.java
similarity index 97%
rename from python/python-psi-impl/src/com/jetbrains/python/sdk/PythonEnvUtil.java
rename to python/python-sdk/src/com/jetbrains/python/sdk/PythonEnvUtil.java
index 59ebad86a914..3eac0ecae31d 100644
--- a/python/python-psi-impl/src/com/jetbrains/python/sdk/PythonEnvUtil.java
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/PythonEnvUtil.java
@@ -19,6 +19,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.EnvironmentUtil;
+import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,6 +29,7 @@ import java.util.Collection;
import java.util.Map;
import java.util.Set;
+@ApiStatus.Internal
public final class PythonEnvUtil {
@SuppressWarnings("SpellCheckingInspection") public static final String PYTHONPATH = "PYTHONPATH";
@SuppressWarnings("SpellCheckingInspection") public static final String PYTHONUNBUFFERED = "PYTHONUNBUFFERED";
@@ -132,10 +134,6 @@ public final class PythonEnvUtil {
addToPythonPath(envs, pythonPathList);
}
- public static void addToEnv(final String key, String value, Map envs) {
- addPathToEnv(envs, key, value);
- }
-
public static void setupEncodingEnvs(Map envs, @NotNull Charset charset) {
final String encoding = charset.name();
setPythonIOEncoding(envs, encoding);
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/Sdks.kt b/python/python-sdk/src/com/jetbrains/python/sdk/Sdks.kt
index c45caf18c6ab..0278195a8226 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/Sdks.kt
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/Sdks.kt
@@ -25,6 +25,7 @@ import com.intellij.util.Urls
import com.intellij.util.system.CpuArch
import com.intellij.util.system.OS
import com.jetbrains.python.psi.LanguageLevel
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil.isPythonSdk
import org.jetbrains.annotations.ApiStatus
import java.net.URL
import java.nio.charset.StandardCharsets
@@ -197,6 +198,8 @@ object SdksKeeper {
// as right now calling pyModuleBlocking from quick-fix is not allowed in EDT.
@ApiStatus.Internal
fun Sdk.setAssociationToModuleAsync(module: Module) {
+ requirePythonSdk()
+
val path = module.basePath
assert(path != null) { "Module $module has not paths, and can't be associated" }
@@ -217,6 +220,8 @@ fun Sdk.setAssociationToModuleAsync(module: Module) {
@ApiStatus.Internal
suspend fun Sdk.setAssociationToModule(module: Module) {
+ requirePythonSdk()
+
val path = module.basePath
assert(path != null) { "Module $module has not paths, and can't be associated" }
setAssociationToPath(path)
@@ -224,6 +229,8 @@ suspend fun Sdk.setAssociationToModule(module: Module) {
@ApiStatus.Internal
suspend fun Sdk.setAssociationToPath(path: String?) {
+ requirePythonSdk()
+
val data = getOrCreateAdditionalData()
.also {
it.associatedModulePath = path
@@ -235,4 +242,12 @@ suspend fun Sdk.setAssociationToPath(path: String?) {
writeAction {
modificator.commitChanges()
}
+}
+
+/**
+ * @throws IllegalArgumentException if sdk is not a python sdk
+ */
+@ApiStatus.Internal
+fun Sdk.requirePythonSdk() {
+ require(isPythonSdk(this, true)) { "Can't be called only for PythonSdkType and not for $sdkType" }
}
\ No newline at end of file
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PyFlavorData.kt b/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PyFlavorData.kt
index 4b4ab76f3df9..755f46345af6 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PyFlavorData.kt
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PyFlavorData.kt
@@ -4,7 +4,7 @@ import com.intellij.execution.target.TargetedCommandLineBuilder
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.remote.RemoteSdkPropertiesPaths
import com.jetbrains.python.sdk.PySdkUtil
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
/**
* Each [PythonSdkFlavor] is associated with [PyFlavorData].
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/legacy/PythonSdkUtil.java b/python/python-sdk/src/com/jetbrains/python/sdk/legacy/PythonSdkUtil.java
new file mode 100644
index 000000000000..b770a03e2a9a
--- /dev/null
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/legacy/PythonSdkUtil.java
@@ -0,0 +1,434 @@
+package com.jetbrains.python.sdk.legacy;
+
+import com.intellij.ide.plugins.PluginManagerCore;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.application.PathManager;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleUtilCore;
+import com.intellij.openapi.projectRoots.ProjectJdkTable;
+import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.roots.ModuleRootManager;
+import com.intellij.openapi.roots.OrderRootType;
+import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.NlsSafe;
+import com.intellij.openapi.util.SystemInfo;
+import com.intellij.openapi.util.io.FileSystemUtil;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.vfs.StandardFileSystems;
+import com.intellij.openapi.vfs.VfsUtilCore;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.util.PlatformUtils;
+import com.intellij.util.SlowOperations;
+import com.intellij.util.SystemProperties;
+import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
+import com.intellij.util.containers.ContainerUtil;
+import com.jetbrains.python.PyNames;
+import com.jetbrains.python.module.PyModuleService;
+import com.jetbrains.python.sdk.CustomSdkHomePattern;
+import com.jetbrains.python.sdk.PyRemoteSdkAdditionalDataMarker;
+import com.jetbrains.python.sdk.PySdkUtil;
+import com.jetbrains.python.venvReader.VirtualEnvReader;
+import org.jetbrains.annotations.*;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import static com.intellij.ide.plugins.PluginManagerCore.ULTIMATE_PLUGIN_ID;
+
+/**
+ * Utility methods for Python {@link Sdk} based on the project model and the file system.
+ *
+ * TODO: Extract SDK "flavor" specific methods into a "Python SDK provider" so that each SDK flavor can be defined independently
+ *
+ * @see PySdkUtil for run-time Python SDK utils
+ */
+@ApiStatus.Internal
+public final class PythonSdkUtil {
+
+ public static final String REMOTE_SOURCES_DIR_NAME = "remote_sources";
+ /**
+ * Name of directory where skeleton files (despite the value) are stored.
+ */
+ public static final String SKELETON_DIR_NAME = "python_stubs";
+ /**
+ * In which root type built-in skeletons are put.
+ */
+ public static final OrderRootType BUILTIN_ROOT_TYPE = OrderRootType.CLASSES;
+ static final String[] WINDOWS_EXECUTABLE_SUFFIXES = {"cmd", "exe", "bat", "com"};
+ private static final Predicate REMOTE_SDK_PREDICATE = PythonSdkUtil::isRemote;
+
+ public static boolean isPythonSdk(@NotNull Sdk sdk) {
+ return isPythonSdk(sdk, false);
+ }
+
+ public static boolean isPythonSdk(@NotNull Sdk sdk, boolean allowRemoteInFreeTier) {
+ if (!PyNames.PYTHON_SDK_ID_NAME.equals(sdk.getSdkType().getName())) {
+ return false;
+ }
+
+ // PY-79923: Should explicitly filter sdks created while pro was active
+ if (isFreeTier()) {
+ return allowRemoteInFreeTier || (!isRemote(sdk));
+ }
+
+ return true;
+ }
+
+ /**
+ * @return PyCharm with Pro mode disabled
+ */
+ public static boolean isFreeTier() {
+ return PlatformUtils.isPyCharm() && (!PlatformUtils.isDataSpell()) && PluginManagerCore.isDisabled(ULTIMATE_PLUGIN_ID);
+ }
+
+ public static @Unmodifiable @NotNull List<@NotNull Sdk> getAllSdks() {
+ return getAllSdks(false);
+ }
+
+ public static @Unmodifiable @NotNull List<@NotNull Sdk> getAllSdks(boolean allowRemoteInFreeTier) {
+ return ContainerUtil.filter(ProjectJdkTable.getInstance().getAllJdks(), sdk -> isPythonSdk(sdk, allowRemoteInFreeTier));
+ }
+
+ public static @Nullable Sdk findPythonSdk(@Nullable Module module) {
+ if (module == null || module.isDisposed()) {
+ return null;
+ }
+
+ Sdk sdk = ModuleRootManager.getInstance(module).getSdk();
+ if (sdk != null && isPythonSdk(sdk)) {
+ return sdk;
+ }
+
+ sdk = PyModuleService.getInstance().findPythonSdk(module);
+ if (sdk != null && isPythonSdk(sdk)) {
+ return sdk;
+ }
+
+ return null;
+ }
+
+ /**
+ * Checks if SDK is legacy remote or remote bases on targets.
+ * Never assume {@link Sdk#getSdkAdditionalData()} has certain type if this method returns true.
+ * In most cases you are encouraged to obtain additional data and check it explicitly
+ */
+ public static boolean isRemote(@Nullable Sdk sdk) {
+ return sdk != null && sdk.getSdkAdditionalData() instanceof PyRemoteSdkAdditionalDataMarker;
+ }
+
+ public static @NlsSafe String getUserSite() {
+ if (SystemInfo.isWindows) {
+ final String appdata = System.getenv("APPDATA");
+ return appdata + File.separator + "Python";
+ }
+ else {
+ final String userHome = SystemProperties.getUserHome();
+ return userHome + File.separator + ".local";
+ }
+ }
+
+ public static boolean isFileInSkeletons(final @NotNull VirtualFile virtualFile, @NotNull Sdk sdk) {
+ final VirtualFile skeletonsDir = findSkeletonsDir(sdk);
+ return skeletonsDir != null && VfsUtilCore.isAncestor(skeletonsDir, virtualFile, false);
+ }
+
+ public static boolean isElementInSkeletons(final @NotNull PsiElement element) {
+ final PsiFile file = element.getContainingFile();
+ if (file != null) {
+ final VirtualFile virtualFile = file.getVirtualFile();
+ if (virtualFile != null) {
+ final Sdk sdk = findPythonSdk(element);
+ if (sdk != null && isFileInSkeletons(virtualFile, sdk)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns skeletons location on the local machine. Independent of SDK credentials type (e.g. ssh, Vagrant, Docker or else).
+ */
+ public static @NotNull String getSkeletonsPath(String basePath, String sdkHome) {
+ String sep = File.separator;
+ return getSkeletonsRootPath(basePath) + sep + FileUtil.toSystemIndependentName(sdkHome).hashCode() + sep;
+ }
+
+ public static @Nullable String getSkeletonsPath(@NotNull Sdk sdk) {
+ String path = sdk.getHomePath();
+ return path != null ? getSkeletonsPath(PathManager.getSystemPath(), path) : null;
+ }
+
+ public static @NotNull String getSkeletonsRootPath(String basePath) {
+ return basePath + File.separator + SKELETON_DIR_NAME;
+ }
+
+ public static @Nullable VirtualFile findSkeletonsDir(final @NotNull Sdk sdk) {
+ return findLibraryDir(sdk, SKELETON_DIR_NAME, BUILTIN_ROOT_TYPE);
+ }
+
+ public static @Nullable VirtualFile findAnyRemoteLibrary(final @NotNull Sdk sdk) {
+ return findLibraryDir(sdk, REMOTE_SOURCES_DIR_NAME, OrderRootType.CLASSES);
+ }
+
+ public static VirtualFile findLibraryDir(Sdk sdk, String dirName, OrderRootType rootType) {
+ final VirtualFile[] virtualFiles = sdk.getRootProvider().getFiles(rootType);
+ for (VirtualFile virtualFile : virtualFiles) {
+ if (virtualFile.isValid() && virtualFile.getPath().contains(dirName)) {
+ return virtualFile;
+ }
+ }
+ return null;
+ }
+
+ public static boolean hasValidSdk() {
+ for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
+ if (isPythonSdk(sdk)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static boolean isDisposed(@NotNull Sdk sdk) {
+ return sdk instanceof Disposable && Disposer.isDisposed((Disposable)sdk);
+ }
+
+ public static List getAllLocalCPythons() {
+ return getAllSdks().stream().filter(REMOTE_SDK_PREDICATE.negate()).collect(Collectors.toList());
+ }
+
+ // It is only here for external plugins
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable String getPythonExecutable(@NotNull String rootPath) {
+ var python = VirtualEnvReader.getInstance().findPythonInPythonRoot(Path.of(rootPath));
+ return (python != null) ? python.toString() : null;
+ }
+
+ /**
+ * @deprecated use {@link #getExecutablePath(Path, String)}
+ */
+ @Deprecated
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable String getExecutablePath(final @NotNull String homeDirectory, @NotNull String name) {
+ Path path = getExecutablePath(Path.of(homeDirectory), name);
+ return (path != null) ? path.toString() : null;
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable Path getExecutablePath(@NotNull Path homeDirectory, @NotNull String name) {
+ Path binDir = homeDirectory.getParent();
+ if (binDir == null) return null;
+ Path runner = binDir.resolve(name);
+ if (Files.exists(runner)) return runner;
+ runner = binDir.resolve("Scripts").resolve(name);
+ if (Files.exists(runner)) return runner;
+
+ if (binDir.getParent() != null) {
+ runner = binDir.getParent().resolve("Scripts").resolve(name);
+ if (Files.exists(runner)) return runner;
+ runner = binDir.getParent().resolve("local").resolve(name);
+ if (Files.exists(runner)) return runner;
+ runner = binDir.getParent().resolve("local").resolve("bin").resolve(name);
+ if (Files.exists(runner)) return runner;
+ }
+
+ // if interpreter is a symlink
+ String homeDirectoryAbsolutePath = homeDirectory.toAbsolutePath().toString();
+ if (FileSystemUtil.isSymLink(homeDirectoryAbsolutePath)) {
+ String resolvedPath = FileSystemUtil.resolveSymLink(homeDirectoryAbsolutePath);
+ if (resolvedPath != null && !resolvedPath.equals(homeDirectoryAbsolutePath)) {
+ return getExecutablePath(Path.of(resolvedPath), name);
+ }
+ }
+ // Search in standard unix path
+ runner = Path.of("/usr", "bin", name);
+ if (Files.exists(runner)) return runner;
+ runner = Path.of("/usr", "local", "bin", name);
+ if (Files.exists(runner)) return runner;
+ return null;
+ }
+
+ /**
+ * @param binaryPath must point to a Python interpreter
+ * @return if the surroundings look like a virtualenv installation, its root is returned (normally the grandparent of binaryPath).
+ */
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable File getVirtualEnvRoot(final @NotNull String binaryPath) {
+ SlowOperations.assertSlowOperationsAreAllowed();
+ final File bin = new File(binaryPath).getParentFile();
+ if (bin != null) {
+ final String rootPath = bin.getParent();
+ if (rootPath != null) {
+ final File root = new File(rootPath);
+ final File activateThis = new File(bin, "activate_this.py");
+ // binaryPath should contain an 'activate' script, and root should have bin (with us) and include and libp
+ if (activateThis.exists()) {
+ final File activate = findExecutableFile(bin, "activate");
+ if (activate != null) {
+ return root;
+ }
+ }
+ // Python 3.3 virtualenvs can be found as described in PEP 405
+ if (new File(root, "pyvenv.cfg").exists()) {
+ return root;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Finds a file that looks executable: an .exe or .cmd under windows, plain file under *nix.
+ *
+ * @param parent directory to look at
+ * @param name name of the executable without suffix
+ * @return File representing the executable, or null.
+ */
+ public static @Nullable File findExecutableFile(File parent, String name) {
+ if (SystemInfo.isWindows) {
+ for (String suffix : WINDOWS_EXECUTABLE_SUFFIXES) {
+ File file = new File(parent, name + "." + suffix);
+ if (file.exists()) return file;
+ }
+ }
+ else if (SystemInfo.isUnix) {
+ File file = new File(parent, name);
+ if (file.exists()) return file;
+ }
+ return null;
+ }
+
+
+ public static @Nullable Sdk findSdkByKey(@NotNull String key) {
+ return ProjectJdkTable.getInstance().findJdk(key);
+ }
+
+ public static @Nullable Sdk findPythonSdk(final @NotNull PsiElement element) {
+ return findPythonSdk(ModuleUtilCore.findModuleForPsiElement(element));
+ }
+
+ /**
+ * @deprecated path is not unique, use {@link #findSdkByKey(String)} instead
+ */
+ @Deprecated
+ public static @Nullable Sdk findSdkByPath(@Nullable String path) {
+ if (path != null) {
+ return findSdkByPath(getAllSdks(), path);
+ }
+ return null;
+ }
+
+
+ /**
+ * @deprecated path is not unique, use {@link #findSdkByKey(String)} instead
+ */
+ @Deprecated
+ public static @Nullable Sdk findSdkByPath(List extends Sdk> sdkList, @Nullable String path) {
+ if (path != null) {
+ for (Sdk sdk : sdkList) {
+ if (sdk != null && FileUtil.pathsEqual(path, sdk.getHomePath())) {
+ return sdk;
+ }
+ }
+ }
+ return null;
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static boolean isVirtualEnv(@NotNull Sdk sdk) {
+ final String path = sdk.getHomePath();
+ return isVirtualEnv(path);
+ }
+
+ @Contract("null -> false")
+ public static boolean isVirtualEnv(@Nullable String path) {
+ return path != null && getVirtualEnvRoot(path) != null;
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable VirtualFile getCondaDirectory(@NotNull Sdk sdk) {
+ final VirtualFile homeDirectory = sdk.getHomeDirectory();
+ if (homeDirectory == null) return null;
+ if (SystemInfo.isWindows) return homeDirectory.getParent();
+ return homeDirectory.getParent().getParent();
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static boolean isCondaVirtualEnv(@NotNull Sdk sdk) {
+ return isCondaVirtualEnv(sdk.getHomePath());
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static boolean isCondaVirtualEnv(@Nullable String sdkPath) {
+ SlowOperations.assertSlowOperationsAreAllowed();
+ final VirtualFile condaMeta = findCondaMeta(sdkPath);
+ if (condaMeta == null) {
+ return false;
+ }
+ final VirtualFile envs = condaMeta.getParent().findChild("envs");
+ return envs == null;
+ }
+
+ /**
+ * @deprecated Check sdk flavour instead
+ */
+ @Deprecated
+ // Conda virtual environment and base conda
+ public static boolean isConda(@NotNull Sdk sdk) {
+ return isConda(sdk.getHomePath());
+ }
+
+ /**
+ * @deprecated flavour instead
+ */
+ @Deprecated
+ public static boolean isConda(@Nullable String sdkPath) {
+ return findCondaMeta(sdkPath) != null;
+ }
+
+ /**
+ * @deprecated flavour instead
+ */
+ @Deprecated
+ public static boolean isBaseConda(@Nullable String sdkPath) {
+ final VirtualFile condaMeta = findCondaMeta(sdkPath);
+ if (condaMeta == null) {
+ return false;
+ }
+ final VirtualFile parent = condaMeta.getParent();
+ if (parent == null) {
+ return false;
+ }
+ final VirtualFile condaBin = parent.findChild("condabin");
+ if (condaBin != null) {
+ return true;
+ }
+ return parent.findChild("envs") != null;
+ }
+
+ @RequiresBackgroundThread(generateAssertion = false)
+ public static @Nullable VirtualFile findCondaMeta(@Nullable String sdkPath) {
+ SlowOperations.assertSlowOperationsAreAllowed();
+ if (sdkPath == null || CustomSdkHomePattern.isCustomPythonSdkHomePath(sdkPath)) {
+ return null;
+ }
+ final VirtualFile homeDirectory = StandardFileSystems.local().findFileByPath(sdkPath);
+ if (homeDirectory == null) {
+ return null;
+ }
+ VirtualFile parentDirectory = homeDirectory.getParent();
+ if (parentDirectory == null) {
+ return null;
+ }
+ final VirtualFile condaParent = SystemInfo.isWindows ? parentDirectory
+ : parentDirectory.getParent();
+ return condaParent != null ? condaParent.findChild("conda-meta") : null;
+ }
+}
diff --git a/python/python-terminal/src/com/intellij/python/terminal/PyVirtualEnvTerminalCustomizer.kt b/python/python-terminal/src/com/intellij/python/terminal/PyVirtualEnvTerminalCustomizer.kt
index 739dbeb867e5..e91ea219f256 100644
--- a/python/python-terminal/src/com/intellij/python/terminal/PyVirtualEnvTerminalCustomizer.kt
+++ b/python/python-terminal/src/com/intellij/python/terminal/PyVirtualEnvTerminalCustomizer.kt
@@ -18,7 +18,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.jetbrains.python.run.findActivateScript
import com.jetbrains.python.sdk.PySdkUtil
import com.jetbrains.python.sdk.PythonSdkAdditionalData
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.flavors.conda.PyCondaFlavorData
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.plugins.terminal.LocalTerminalCustomizer
diff --git a/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/providers/WindowsSystemPythonProvider.kt b/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/providers/WindowsSystemPythonProvider.kt
index 34451485bed9..1d391ac8eb76 100644
--- a/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/providers/WindowsSystemPythonProvider.kt
+++ b/python/services/system-python/src/com/intellij/python/community/services/systemPython/impl/providers/WindowsSystemPythonProvider.kt
@@ -10,7 +10,7 @@ import com.intellij.platform.eel.provider.localEel
import com.intellij.python.community.services.systemPython.SystemPythonProvider
import com.jetbrains.python.PythonBinary
import com.jetbrains.python.errorProcessing.PyResult
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.WinRegistryService
import com.jetbrains.python.sdk.getAppxFiles
import com.jetbrains.python.venvReader.tryResolvePath
diff --git a/python/src/com/jetbrains/python/black/configuration/BlackFormatterConfiguration.kt b/python/src/com/jetbrains/python/black/configuration/BlackFormatterConfiguration.kt
index 7a10ef5ae50f..862574b38737 100644
--- a/python/src/com/jetbrains/python/black/configuration/BlackFormatterConfiguration.kt
+++ b/python/src/com/jetbrains/python/black/configuration/BlackFormatterConfiguration.kt
@@ -9,7 +9,7 @@ import com.intellij.openapi.project.modules
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.util.xmlb.XmlSerializerUtil
import com.jetbrains.python.sdk.PythonSdkType
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.pythonSdk
const val BLACK_ID: String = "Black"
diff --git a/python/src/com/jetbrains/python/codeInsight/mlcompletion/PyCompletionFeatures.kt b/python/src/com/jetbrains/python/codeInsight/mlcompletion/PyCompletionFeatures.kt
index 269c5edfec7b..0a90abe6d7e3 100644
--- a/python/src/com/jetbrains/python/codeInsight/mlcompletion/PyCompletionFeatures.kt
+++ b/python/src/com/jetbrains/python/codeInsight/mlcompletion/PyCompletionFeatures.kt
@@ -18,7 +18,8 @@ import com.intellij.psi.util.PsiTreeUtil
import com.intellij.psi.util.elementType
import com.jetbrains.python.PyTokenTypes
import com.jetbrains.python.psi.*
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil
object PyCompletionFeatures {
fun isDictKey(element: LookupElement): Boolean {
@@ -90,7 +91,7 @@ object PyCompletionFeatures {
sdk = PythonSdkUtil.findPythonSdk(containingFile)
}
if (vFile != null) {
- val isFromStdLib = PythonSdkUtil.isStdLib(vFile, sdk)
+ val isFromStdLib = PySkeletonUtil.isStdLib(vFile, sdk)
val canFindModule = ModuleUtilCore.findModuleForFile(vFile, psiElement.project) != null
return ElementModuleCompletionFeatures(isFromStdLib, canFindModule)
}
diff --git a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibDocumentationLinkProvider.java b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibDocumentationLinkProvider.java
index 8253b1c9be3d..b45e4929918e 100644
--- a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibDocumentationLinkProvider.java
+++ b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibDocumentationLinkProvider.java
@@ -16,7 +16,7 @@ import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.resolve.QualifiedNameFinder;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jsoup.nodes.Document;
@@ -978,7 +978,7 @@ public final class PyStdlibDocumentationLinkProvider implements PythonDocumentat
}
Sdk sdk = PyBuiltinCache.findSdkForFile(file);
VirtualFile vFile = file.getVirtualFile();
- if (vFile != null && sdk != null && PythonSdkUtil.isStdLib(vFile, sdk)) {
+ if (vFile != null && sdk != null && PySkeletonUtil.isStdLib(vFile, sdk)) {
QualifiedName qName = QualifiedNameFinder.findCanonicalImportPath(element, originalElement);
return getStdlibUrlFor(element, qName, sdk);
}
diff --git a/python/src/com/jetbrains/python/codeInsight/stubs/checkers/PyStubsChecker.kt b/python/src/com/jetbrains/python/codeInsight/stubs/checkers/PyStubsChecker.kt
index e735fe51fa70..db176cdfdc29 100644
--- a/python/src/com/jetbrains/python/codeInsight/stubs/checkers/PyStubsChecker.kt
+++ b/python/src/com/jetbrains/python/codeInsight/stubs/checkers/PyStubsChecker.kt
@@ -11,7 +11,7 @@ import com.jetbrains.python.NON_INTERACTIVE_ROOT_TRACE_CONTEXT
import com.jetbrains.python.packaging.common.PythonPackageManagementListener
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.statistics.sdks
internal abstract class PyStubsChecker(val project: Project) : Disposable.Default {
diff --git a/python/src/com/jetbrains/python/codeInsight/stubs/visitors/PyStubVisitor.kt b/python/src/com/jetbrains/python/codeInsight/stubs/visitors/PyStubVisitor.kt
index 34b9de74995f..ab023fb05b47 100644
--- a/python/src/com/jetbrains/python/codeInsight/stubs/visitors/PyStubVisitor.kt
+++ b/python/src/com/jetbrains/python/codeInsight/stubs/visitors/PyStubVisitor.kt
@@ -8,7 +8,7 @@ import com.jetbrains.python.PyPsiPackageUtil
import com.jetbrains.python.inspections.PyInspectionVisitor
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.psi.PyFile
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.isReadOnly
internal abstract class PyStubVisitor(
diff --git a/python/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java b/python/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
index 766f56dfcd6f..2573468ff920 100644
--- a/python/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
+++ b/python/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
@@ -6,7 +6,6 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
@@ -30,6 +29,7 @@ import com.jetbrains.python.packaging.PyPackageManagers;
import com.jetbrains.python.packaging.PyPackagesNotificationPanel;
import com.jetbrains.python.packaging.ui.PyInstalledPackagesPanel;
import com.jetbrains.python.sdk.*;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -43,7 +43,7 @@ import java.util.Map;
import java.util.function.Consumer;
import static com.jetbrains.python.sdk.PySdkRenderingKt.groupModuleSdksByTypes;
-import static com.jetbrains.python.sdk.PythonSdkUtil.isRemote;
+import static com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote;
@ApiStatus.Internal
public class PyActiveSdkConfigurable implements UnnamedConfigurable {
diff --git a/python/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java b/python/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java
index 8d3fac49962e..2f4c3740c0c0 100644
--- a/python/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java
+++ b/python/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java
@@ -13,6 +13,7 @@ import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory;
import com.jetbrains.python.run.TargetConfigurationWithLocalFsAccessExKt;
import com.jetbrains.python.sdk.*;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -22,7 +23,7 @@ import java.util.Comparator;
import java.util.List;
import static com.jetbrains.python.SdkUiUtilKt.*;
-import static com.jetbrains.python.sdk.PythonSdkUtil.isRemote;
+import static com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote;
/**
* Manages the SDK model shared between PythonSdkConfigurable and PyActiveSdkConfigurable.
diff --git a/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java b/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
index 0b99a9f72b16..bd47d6159601 100644
--- a/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
+++ b/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
@@ -44,7 +44,7 @@ import com.jetbrains.python.packaging.PyPackageRequirementsSettings;
import com.jetbrains.python.packaging.PyRequirementsKt;
import com.jetbrains.python.packaging.requirementsTxt.PythonRequirementTxtSdkUtils;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.pipenv.PipenvCommandExecutorKt;
import com.jetbrains.python.testing.PyAbstractTestFactory;
import com.jetbrains.python.testing.settings.PyTestRunConfigurationRenderer;
diff --git a/python/src/com/jetbrains/python/configuration/PythonInterpreterDetailsConfigurables.kt b/python/src/com/jetbrains/python/configuration/PythonInterpreterDetailsConfigurables.kt
index 59d90dca0c78..fe99b7dc854e 100644
--- a/python/src/com/jetbrains/python/configuration/PythonInterpreterDetailsConfigurables.kt
+++ b/python/src/com/jetbrains/python/configuration/PythonInterpreterDetailsConfigurables.kt
@@ -10,7 +10,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.remote.PyRemoteSdkAdditionalData
import com.jetbrains.python.run.target.ConnectionCredentialsToTargetConfigurationConverter
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.target.PyTargetAwareAdditionalData
import com.jetbrains.python.target.PythonLanguageRuntimeConfiguration
import com.jetbrains.python.target.PythonLanguageRuntimeType
diff --git a/python/src/com/jetbrains/python/configuration/PythonInterpreterMasterDetails.kt b/python/src/com/jetbrains/python/configuration/PythonInterpreterMasterDetails.kt
index d9f1f104f143..6308815d11b5 100644
--- a/python/src/com/jetbrains/python/configuration/PythonInterpreterMasterDetails.kt
+++ b/python/src/com/jetbrains/python/configuration/PythonInterpreterMasterDetails.kt
@@ -21,6 +21,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.ModuleOrProject.ModuleAndProject
import com.jetbrains.python.sdk.ModuleOrProject.ProjectOnly
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import javax.swing.JTree
import javax.swing.tree.DefaultMutableTreeNode
import javax.swing.tree.DefaultTreeModel
diff --git a/python/src/com/jetbrains/python/configuration/PythonPathEditor.java b/python/src/com/jetbrains/python/configuration/PythonPathEditor.java
index 791aa9c9f1c7..88d90f96eee1 100644
--- a/python/src/com/jetbrains/python/configuration/PythonPathEditor.java
+++ b/python/src/com/jetbrains/python/configuration/PythonPathEditor.java
@@ -29,7 +29,7 @@ import com.jetbrains.python.PyBundle;
import com.jetbrains.python.codeInsight.typing.PyBundledStubs;
import com.jetbrains.python.codeInsight.typing.PyTypeShed;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunnerUtil.kt b/python/src/com/jetbrains/python/console/PydevConsoleRunnerUtil.kt
index 78aca3cbddbd..5304c215aff3 100644
--- a/python/src/com/jetbrains/python/console/PydevConsoleRunnerUtil.kt
+++ b/python/src/com/jetbrains/python/console/PydevConsoleRunnerUtil.kt
@@ -32,7 +32,7 @@ import com.jetbrains.python.remote.PythonRemoteInterpreterManager
import com.jetbrains.python.run.PythonCommandLineState
import com.jetbrains.python.run.toStringLiteral
import com.jetbrains.python.sdk.PythonEnvUtil
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.rootManager
import com.jetbrains.python.target.PyTargetAwareAdditionalData
import java.util.function.Function
diff --git a/python/src/com/jetbrains/python/debugger/PyDebugNotificationForCythonExtension.java b/python/src/com/jetbrains/python/debugger/PyDebugNotificationForCythonExtension.java
index 1866ea1fb55d..73294d45f4de 100644
--- a/python/src/com/jetbrains/python/debugger/PyDebugNotificationForCythonExtension.java
+++ b/python/src/com/jetbrains/python/debugger/PyDebugNotificationForCythonExtension.java
@@ -39,7 +39,7 @@ import com.jetbrains.python.PyBundle;
import com.jetbrains.python.run.AbstractPythonRunConfiguration;
import com.jetbrains.python.run.PythonRunConfiguration;
import com.jetbrains.python.sdk.PythonEnvUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import java.io.File;
diff --git a/python/src/com/jetbrains/python/debugger/PyDebugRunner.java b/python/src/com/jetbrains/python/debugger/PyDebugRunner.java
index c70ea1c8ed0b..8683665a76d3 100644
--- a/python/src/com/jetbrains/python/debugger/PyDebugRunner.java
+++ b/python/src/com/jetbrains/python/debugger/PyDebugRunner.java
@@ -54,7 +54,7 @@ import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.run.*;
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest;
import com.jetbrains.python.sdk.PySdkExtKt;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import kotlin.Unit;
diff --git a/python/src/com/jetbrains/python/debugger/attach/PyLocalAttachDebuggerProvider.java b/python/src/com/jetbrains/python/debugger/attach/PyLocalAttachDebuggerProvider.java
index afb9b5de4446..ef3271900d6d 100644
--- a/python/src/com/jetbrains/python/debugger/attach/PyLocalAttachDebuggerProvider.java
+++ b/python/src/com/jetbrains/python/debugger/attach/PyLocalAttachDebuggerProvider.java
@@ -18,7 +18,7 @@ import com.jetbrains.python.run.AbstractPythonRunConfiguration;
import com.jetbrains.python.sdk.PreferredSdkComparator;
import com.jetbrains.python.sdk.PySdkExtKt;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/hatch/sdk/HatchVirtualEnvironmentExt.kt b/python/src/com/jetbrains/python/hatch/sdk/HatchVirtualEnvironmentExt.kt
index f6fd46e83339..c2f48a5c24ff 100644
--- a/python/src/com/jetbrains/python/hatch/sdk/HatchVirtualEnvironmentExt.kt
+++ b/python/src/com/jetbrains/python/hatch/sdk/HatchVirtualEnvironmentExt.kt
@@ -11,7 +11,7 @@ import com.intellij.python.hatch.getHatchEnvVirtualProjectPath
import com.jetbrains.python.Result
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.impl.resolvePythonBinary
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.createSdk
import com.jetbrains.python.sdk.persist
import kotlinx.coroutines.Dispatchers
diff --git a/python/src/com/jetbrains/python/hatch/sdk/SdkExt.kt b/python/src/com/jetbrains/python/hatch/sdk/SdkExt.kt
index e9cab0daf7ad..64067e8f0d7b 100644
--- a/python/src/com/jetbrains/python/hatch/sdk/SdkExt.kt
+++ b/python/src/com/jetbrains/python/hatch/sdk/SdkExt.kt
@@ -2,7 +2,7 @@
package com.jetbrains.python.hatch.sdk
import com.intellij.openapi.projectRoots.Sdk
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.getOrCreateAdditionalData
internal val Sdk.isHatch: Boolean
diff --git a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspectionAdvertiser.java b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspectionAdvertiser.java
index 2e2e88d4991f..ec0f7156032b 100644
--- a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspectionAdvertiser.java
+++ b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspectionAdvertiser.java
@@ -28,9 +28,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyFile;
-import com.jetbrains.python.psi.PyFromImportStatement;
-import com.jetbrains.python.psi.impl.PyPsiUtils;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/inspections/PyInterpreterInspection.java b/python/src/com/jetbrains/python/inspections/PyInterpreterInspection.java
index 44df37814815..ed9ecf42ad63 100644
--- a/python/src/com/jetbrains/python/inspections/PyInterpreterInspection.java
+++ b/python/src/com/jetbrains/python/inspections/PyInterpreterInspection.java
@@ -49,6 +49,7 @@ import com.jetbrains.python.sdk.*;
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer;
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration;
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.ui.PyUiUtil;
import kotlin.Pair;
import one.util.streamex.StreamEx;
diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferenceDefaultInspectionExtension.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferenceDefaultInspectionExtension.java
index ba8d1920c9a2..2e73799d1ae2 100644
--- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferenceDefaultInspectionExtension.java
+++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferenceDefaultInspectionExtension.java
@@ -4,7 +4,7 @@ package com.jetbrains.python.inspections;
import com.intellij.psi.PsiFile;
import com.intellij.util.PlatformUtils;
import com.jetbrains.python.PythonRuntimeService;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/inspections/quickfix/GenerateBinaryStubsFix.java b/python/src/com/jetbrains/python/inspections/quickfix/GenerateBinaryStubsFix.java
index 05f744f8ecc6..5e1400a979be 100644
--- a/python/src/com/jetbrains/python/inspections/quickfix/GenerateBinaryStubsFix.java
+++ b/python/src/com/jetbrains/python/inspections/quickfix/GenerateBinaryStubsFix.java
@@ -29,7 +29,7 @@ import com.jetbrains.python.psi.PyFromImportStatement;
import com.jetbrains.python.psi.PyImportStatementBase;
import com.jetbrains.python.sdk.InvalidSdkException;
import com.jetbrains.python.sdk.PySdkUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeletons.PySkeletonGenerator;
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/inspections/quickfix/InstallAllPackagesQuickFix.kt b/python/src/com/jetbrains/python/inspections/quickfix/InstallAllPackagesQuickFix.kt
index e238dda9062d..a82d8b6bd1fd 100644
--- a/python/src/com/jetbrains/python/inspections/quickfix/InstallAllPackagesQuickFix.kt
+++ b/python/src/com/jetbrains/python/inspections/quickfix/InstallAllPackagesQuickFix.kt
@@ -9,7 +9,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.PyPsiPackageUtil.moduleToPackageName
import com.jetbrains.python.packaging.management.ui.PythonPackageManagerUI
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import org.jetbrains.annotations.Nls
class InstallAllPackagesQuickFix(private val packageNames: List) : LocalQuickFix {
diff --git a/python/src/com/jetbrains/python/inspections/quickfix/InstallPackageQuickFix.kt b/python/src/com/jetbrains/python/inspections/quickfix/InstallPackageQuickFix.kt
index 55de79f99161..666513308759 100644
--- a/python/src/com/jetbrains/python/inspections/quickfix/InstallPackageQuickFix.kt
+++ b/python/src/com/jetbrains/python/inspections/quickfix/InstallPackageQuickFix.kt
@@ -8,7 +8,7 @@ import com.intellij.openapi.project.Project
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.management.ui.PythonPackageManagerUI
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.statistics.PyPackagesUsageCollector
import org.jetbrains.annotations.Nls
diff --git a/python/src/com/jetbrains/python/inspections/requirement/PyRequirementVisitor.kt b/python/src/com/jetbrains/python/inspections/requirement/PyRequirementVisitor.kt
index 7afdc47ebf42..5cf2f279d158 100644
--- a/python/src/com/jetbrains/python/inspections/requirement/PyRequirementVisitor.kt
+++ b/python/src/com/jetbrains/python/inspections/requirement/PyRequirementVisitor.kt
@@ -21,7 +21,7 @@ import com.jetbrains.python.psi.PyImportStatement
import com.jetbrains.python.psi.PyQualifiedExpression
import com.jetbrains.python.psi.impl.PyPsiUtils
import com.jetbrains.python.psi.types.TypeEvalContext
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.pythonSdk
import org.jetbrains.annotations.ApiStatus
diff --git a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt
index 6a1ac4ad7ee1..95796aaa43e4 100644
--- a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt
+++ b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.kt
@@ -39,7 +39,7 @@ import com.jetbrains.python.psi.impl.PyFromImportStatementImpl
import com.jetbrains.python.psi.impl.PyImportElementImpl
import com.jetbrains.python.psi.impl.references.PyImportReference
import com.jetbrains.python.psi.types.TypeEvalContext
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.isReadOnly
/**
diff --git a/python/src/com/jetbrains/python/packaging/PyDependencyCollector.kt b/python/src/com/jetbrains/python/packaging/PyDependencyCollector.kt
index 695d88281897..ea45b17039dc 100644
--- a/python/src/com/jetbrains/python/packaging/PyDependencyCollector.kt
+++ b/python/src/com/jetbrains/python/packaging/PyDependencyCollector.kt
@@ -11,7 +11,7 @@ import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginAdver
import com.intellij.openapi.util.IntellijInternalApi
import com.jetbrains.python.packaging.common.PythonPackageManagementListener
import com.jetbrains.python.packaging.management.PythonPackageManager
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal class PyDependencyCollector : DependencyCollector {
override suspend fun collectDependencies(project: Project): Collection {
diff --git a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java
index d0485b8dc7d2..c7f9e7152002 100644
--- a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java
+++ b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java
@@ -40,7 +40,7 @@ import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory;
import com.jetbrains.python.sdk.CredentialsTypeExChecker;
import com.jetbrains.python.sdk.PySdkExtKt;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.flavors.conda.CondaEnvSdkFlavor;
import com.jetbrains.python.target.PyTargetAwareAdditionalData;
import org.jetbrains.annotations.ApiStatus;
diff --git a/python/src/com/jetbrains/python/packaging/PyRequirementsTxtUtil.kt b/python/src/com/jetbrains/python/packaging/PyRequirementsTxtUtil.kt
index 6db635ab6a60..2751a9c5e425 100644
--- a/python/src/com/jetbrains/python/packaging/PyRequirementsTxtUtil.kt
+++ b/python/src/com/jetbrains/python/packaging/PyRequirementsTxtUtil.kt
@@ -35,7 +35,7 @@ import com.jetbrains.python.packaging.requirementsTxt.PythonRequirementTxtSdkUti
import com.jetbrains.python.psi.PyFile
import com.jetbrains.python.sdk.PySdkPopupFactory
import com.jetbrains.python.sdk.PythonSdkAdditionalData
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.statistics.SyncPythonRequirementsIdsHolder.Companion.ANALYZE_ENTRIES_IN_REQUIREMENTS_FILE_FAILED
import com.jetbrains.python.statistics.SyncPythonRequirementsIdsHolder.Companion.CREATE_REQUIREMENTS_FILE_FAILED
import com.jetbrains.python.statistics.SyncPythonRequirementsIdsHolder.Companion.NO_INTERPRETER_CONFIGURED
diff --git a/python/src/com/jetbrains/python/packaging/pip/PipPythonPackageManager.kt b/python/src/com/jetbrains/python/packaging/pip/PipPythonPackageManager.kt
index 7f8339b88b87..1397c283a19f 100644
--- a/python/src/com/jetbrains/python/packaging/pip/PipPythonPackageManager.kt
+++ b/python/src/com/jetbrains/python/packaging/pip/PipPythonPackageManager.kt
@@ -22,7 +22,7 @@ import com.jetbrains.python.packaging.management.hasInstalledPackage
import com.jetbrains.python.packaging.requirementsTxt.PythonRequirementsTxtManager
import com.jetbrains.python.packaging.setupPy.SetupPyManager
import com.jetbrains.python.psi.LanguageLevel
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.statistics.version
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
diff --git a/python/src/com/jetbrains/python/packaging/setupPy/CreateSetupPyAction.kt b/python/src/com/jetbrains/python/packaging/setupPy/CreateSetupPyAction.kt
index eb3e7a0aa927..c946eecbfec5 100644
--- a/python/src/com/jetbrains/python/packaging/setupPy/CreateSetupPyAction.kt
+++ b/python/src/com/jetbrains/python/packaging/setupPy/CreateSetupPyAction.kt
@@ -28,7 +28,7 @@ import com.jetbrains.python.packaging.PyPackageUtil
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.management.hasInstalledPackageSnapshot
import com.jetbrains.python.psi.PyUtil
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import java.util.function.Supplier
class CreateSetupPyAction : CreateFromTemplateAction(
diff --git a/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskChooserAction.java b/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskChooserAction.java
index 53a4e39fc23b..ca77e906033c 100644
--- a/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskChooserAction.java
+++ b/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskChooserAction.java
@@ -22,7 +22,7 @@ import com.jetbrains.python.PyBundle;
import com.jetbrains.python.packaging.PyPackageUtil;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.run.PythonTask;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
diff --git a/python/src/com/jetbrains/python/packaging/toolwindow/PyPackagingToolWindowService.kt b/python/src/com/jetbrains/python/packaging/toolwindow/PyPackagingToolWindowService.kt
index 7667e6d0c655..4e6349b19f65 100644
--- a/python/src/com/jetbrains/python/packaging/toolwindow/PyPackagingToolWindowService.kt
+++ b/python/src/com/jetbrains/python/packaging/toolwindow/PyPackagingToolWindowService.kt
@@ -40,7 +40,7 @@ import com.jetbrains.python.packaging.pyRequirement
import com.jetbrains.python.packaging.repository.*
import com.jetbrains.python.packaging.statistics.PythonPackagesToolwindowStatisticsCollector
import com.jetbrains.python.packaging.toolwindow.model.*
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.pythonSdk
import com.jetbrains.python.statistics.PythonPackagesIdsHolder.Companion.PYTHON_PACKAGE_DELETED
import com.jetbrains.python.statistics.PythonPackagesIdsHolder.Companion.PYTHON_PACKAGE_INSTALLED
diff --git a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java
index 0b9546700329..e376e282c49b 100644
--- a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java
+++ b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java
@@ -23,7 +23,7 @@ import com.jetbrains.python.packaging.PyPackageUtil;
import com.jetbrains.python.packaging.PyPackagesNotificationPanel;
import com.jetbrains.python.packaging.PyPackagingSettings;
import com.jetbrains.python.packaging.bridge.PythonPackageManagementServiceBridge;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java
index 7d7871bf4912..5478f40f7192 100644
--- a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java
+++ b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java
@@ -17,6 +17,7 @@ import com.intellij.webcore.packaging.InstalledPackage;
import com.intellij.webcore.packaging.PackageManagementServiceEx;
import com.intellij.webcore.packaging.RepoPackage;
import com.jetbrains.python.PyBundle;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.impl.PySdkBundle;
import com.jetbrains.python.errorProcessing.Exe;
import com.jetbrains.python.errorProcessing.ExecErrorImpl;
@@ -25,7 +26,6 @@ import com.jetbrains.python.packaging.*;
import com.jetbrains.python.packaging.PyPIPackageUtil.PackageDetails;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.sdk.PySdkUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/projectCreation/venvWithSdkCreator.kt b/python/src/com/jetbrains/python/projectCreation/venvWithSdkCreator.kt
index 131d9c777e87..05ce2a1236d7 100644
--- a/python/src/com/jetbrains/python/projectCreation/venvWithSdkCreator.kt
+++ b/python/src/com/jetbrains/python/projectCreation/venvWithSdkCreator.kt
@@ -21,7 +21,7 @@ import com.jetbrains.python.*
import com.jetbrains.python.errorProcessing.MessageError
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.errorProcessing.getOr
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.configurePythonSdk
import com.jetbrains.python.sdk.createSdk
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
diff --git a/python/src/com/jetbrains/python/projectView/PyRemoteLibrariesNode.java b/python/src/com/jetbrains/python/projectView/PyRemoteLibrariesNode.java
index 6435ecc6e14f..4cf2741cec5c 100644
--- a/python/src/com/jetbrains/python/projectView/PyRemoteLibrariesNode.java
+++ b/python/src/com/jetbrains/python/projectView/PyRemoteLibrariesNode.java
@@ -20,7 +20,7 @@ import com.intellij.remote.RemoteSdkProperties;
import com.intellij.util.PlatformIcons;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/projectView/PySkeletonsNode.java b/python/src/com/jetbrains/python/projectView/PySkeletonsNode.java
index 95f41a3bdc7e..1ff88c9a0f19 100644
--- a/python/src/com/jetbrains/python/projectView/PySkeletonsNode.java
+++ b/python/src/com/jetbrains/python/projectView/PySkeletonsNode.java
@@ -11,7 +11,7 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.util.PlatformIcons;
import com.jetbrains.python.PyBundle;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/projectView/PyTreeStructureProvider.java b/python/src/com/jetbrains/python/projectView/PyTreeStructureProvider.java
index f612d0c57af2..7ba34f7ca710 100644
--- a/python/src/com/jetbrains/python/projectView/PyTreeStructureProvider.java
+++ b/python/src/com/jetbrains/python/projectView/PyTreeStructureProvider.java
@@ -29,7 +29,7 @@ import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.psi.impl.PyPsiUtils;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsInTomlQuickFix.kt b/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsInTomlQuickFix.kt
index 67a0e85fc119..e67bb123d719 100644
--- a/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsInTomlQuickFix.kt
+++ b/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsInTomlQuickFix.kt
@@ -9,7 +9,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.PyRequirement
import com.jetbrains.python.packaging.management.ui.PythonPackageManagerUI
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal class InstallAllRequirementsInTomlQuickFix(val requirements: List) : LocalQuickFix {
override fun getFamilyName(): String {
diff --git a/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsQuickFix.kt b/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsQuickFix.kt
index 7a33c19e0152..b69c69252308 100644
--- a/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsQuickFix.kt
+++ b/python/src/com/jetbrains/python/requirements/inspections/quickfixes/InstallAllRequirementsQuickFix.kt
@@ -9,7 +9,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.PyRequirement
import com.jetbrains.python.packaging.management.ui.PythonPackageManagerUI
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal class InstallAllRequirementsQuickFix(val requirements: List) : LocalQuickFix {
override fun getFamilyName(): String {
diff --git a/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java b/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java
index 6cca53320441..b59dac0585d6 100644
--- a/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java
+++ b/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java
@@ -30,7 +30,7 @@ import com.jetbrains.python.PythonModuleTypeBase;
import com.jetbrains.python.sdk.PySdkExtKt;
import com.jetbrains.python.sdk.PythonEnvUtil;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/run/PyRemoteAnalyzeStacktraceFilter.java b/python/src/com/jetbrains/python/run/PyRemoteAnalyzeStacktraceFilter.java
index d3e83df30f1a..f0df10bda473 100644
--- a/python/src/com/jetbrains/python/run/PyRemoteAnalyzeStacktraceFilter.java
+++ b/python/src/com/jetbrains/python/run/PyRemoteAnalyzeStacktraceFilter.java
@@ -10,7 +10,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.remote.PathMappingProvider;
import com.intellij.util.PathMappingSettings;
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/run/PythonCommandLineState.java b/python/src/com/jetbrains/python/run/PythonCommandLineState.java
index 1315deaa68c7..4c88eb51b921 100644
--- a/python/src/com/jetbrains/python/run/PythonCommandLineState.java
+++ b/python/src/com/jetbrains/python/run/PythonCommandLineState.java
@@ -73,6 +73,7 @@ import com.jetbrains.python.run.target.PythonCommandLineTargetEnvironmentProvide
import com.jetbrains.python.sdk.*;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.conda.CondaPythonExecKt;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.target.PyTargetAwareAdditionalData;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/run/PythonConfigurationFactoryBase.java b/python/src/com/jetbrains/python/run/PythonConfigurationFactoryBase.java
index 89cc4de9a0cf..5cbf1360e4a5 100644
--- a/python/src/com/jetbrains/python/run/PythonConfigurationFactoryBase.java
+++ b/python/src/com/jetbrains/python/run/PythonConfigurationFactoryBase.java
@@ -19,7 +19,7 @@ import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.openapi.project.Project;
import com.intellij.util.PlatformUtils;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
public abstract class PythonConfigurationFactoryBase extends ConfigurationFactory {
diff --git a/python/src/com/jetbrains/python/run/PythonTask.java b/python/src/com/jetbrains/python/run/PythonTask.java
index 4191f2b43148..02a1dcb36239 100644
--- a/python/src/com/jetbrains/python/run/PythonTask.java
+++ b/python/src/com/jetbrains/python/run/PythonTask.java
@@ -39,7 +39,7 @@ import com.jetbrains.python.remote.PyRemoteSdkAdditionalData;
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest;
import com.jetbrains.python.sdk.PyRemoteSdkAdditionalDataMarker;
import com.jetbrains.python.sdk.PythonEnvUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.target.PyTargetAwareAdditionalData;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/run/TargetedPythonPaths.kt b/python/src/com/jetbrains/python/run/TargetedPythonPaths.kt
index 6103cc3c2dbe..afb7a039ff08 100644
--- a/python/src/com/jetbrains/python/run/TargetedPythonPaths.kt
+++ b/python/src/com/jetbrains/python/run/TargetedPythonPaths.kt
@@ -29,7 +29,7 @@ import com.jetbrains.python.remote.PyRemotePathMapper
import com.jetbrains.python.run.target.getTargetPathForPythonConsoleExecution
import com.jetbrains.python.sdk.PythonEnvUtil
import com.jetbrains.python.sdk.PythonSdkAdditionalData
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import java.io.File
import java.nio.file.Path
diff --git a/python/src/com/jetbrains/python/run/configuration/PySdkComboBox.kt b/python/src/com/jetbrains/python/run/configuration/PySdkComboBox.kt
index 57ff1238a09f..af4067920163 100644
--- a/python/src/com/jetbrains/python/run/configuration/PySdkComboBox.kt
+++ b/python/src/com/jetbrains/python/run/configuration/PySdkComboBox.kt
@@ -9,7 +9,7 @@ import com.intellij.openapi.util.Computable
import com.jetbrains.python.PyBundle
import com.jetbrains.python.run.AbstractPythonRunConfigurationParams
import com.jetbrains.python.sdk.PySdkListCellRenderer
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import java.util.function.Consumer
class PySdkComboBox(private val addDefault: Boolean,
diff --git a/python/src/com/jetbrains/python/run/filter/PythonInstallPackageFilter.kt b/python/src/com/jetbrains/python/run/filter/PythonInstallPackageFilter.kt
index 832e465f40fc..39a6f805e314 100644
--- a/python/src/com/jetbrains/python/run/filter/PythonInstallPackageFilter.kt
+++ b/python/src/com/jetbrains/python/run/filter/PythonInstallPackageFilter.kt
@@ -13,7 +13,7 @@ import com.jetbrains.python.PyPsiPackageUtil
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.management.isNotInstalledAndCanBeInstalled
import com.jetbrains.python.psi.PyFile
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.isReadOnly
import com.jetbrains.python.sdk.pythonSdk
import org.jetbrains.annotations.ApiStatus
diff --git a/python/src/com/jetbrains/python/run/runAnything/pyRunAnythingUtil.kt b/python/src/com/jetbrains/python/run/runAnything/pyRunAnythingUtil.kt
index 7094920e2559..5995a686a3f8 100644
--- a/python/src/com/jetbrains/python/run/runAnything/pyRunAnythingUtil.kt
+++ b/python/src/com/jetbrains/python/run/runAnything/pyRunAnythingUtil.kt
@@ -21,7 +21,7 @@ import com.intellij.psi.search.FilenameIndex
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.EnvironmentUtil
import com.jetbrains.python.run.PythonRunConfiguration
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal val DataContext.project: Project
get() = RunAnythingUtil.fetchProject(this)
diff --git a/python/src/com/jetbrains/python/sdk/InterpreterDirectoryMacro.java b/python/src/com/jetbrains/python/sdk/InterpreterDirectoryMacro.java
index caa23571f584..3659d0fe2d17 100644
--- a/python/src/com/jetbrains/python/sdk/InterpreterDirectoryMacro.java
+++ b/python/src/com/jetbrains/python/sdk/InterpreterDirectoryMacro.java
@@ -14,6 +14,7 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.PathUtil;
import com.jetbrains.python.PyBundle;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/sdk/PreferredSdkComparator.java b/python/src/com/jetbrains/python/sdk/PreferredSdkComparator.java
index ab61ff7bb9aa..461795d8a5e6 100644
--- a/python/src/com/jetbrains/python/sdk/PreferredSdkComparator.java
+++ b/python/src/com/jetbrains/python/sdk/PreferredSdkComparator.java
@@ -5,6 +5,7 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.util.Comparing;
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import java.util.Comparator;
diff --git a/python/src/com/jetbrains/python/sdk/PySdkExt.kt b/python/src/com/jetbrains/python/sdk/PySdkExt.kt
index 296661bfd7e6..2cb846cc5b95 100644
--- a/python/src/com/jetbrains/python/sdk/PySdkExt.kt
+++ b/python/src/com/jetbrains/python/sdk/PySdkExt.kt
@@ -44,12 +44,15 @@ import com.jetbrains.python.packaging.utils.PyPackageCoroutine
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.remote.PyRemoteSdkAdditionalData
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil.isPythonSdk
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.setReadyToUseSdk
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor
import com.jetbrains.python.sdk.flavors.conda.CondaEnvSdkFlavor
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.readOnly.PythonSdkReadOnlyProvider
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil
import com.jetbrains.python.target.PyTargetAwareAdditionalData
import com.jetbrains.python.target.createDetectedSdk
import com.jetbrains.python.util.ShowingMessageErrorSync
@@ -487,7 +490,7 @@ private val Sdk.associatedPathFromAdditionalData: String?
get() = (sdkAdditionalData as? PythonSdkAdditionalData)?.associatedModulePath
private val Sdk.sitePackagesDirectory: VirtualFile?
- get() = PythonSdkUtil.getSitePackagesDirectory(this)
+ get() = PySkeletonUtil.getSitePackagesDirectory(this)
val Sdk.sdkFlavor: PythonSdkFlavor<*> get() = getOrCreateAdditionalData().flavor
@@ -608,6 +611,8 @@ fun Sdk.configureBuilderToRunPythonOnTarget(targetCommandLineBuilder: TargetedCo
*/
val Sdk.sdkSeemsValid: Boolean
get() {
+ if (!isPythonSdk(this, true)) return false
+
val pythonSdkAdditionalData = getOrCreateAdditionalData()
if (pythonSdkAdditionalData is PyRemoteSdkAdditionalData) return true
return pythonSdkAdditionalData.flavorAndData.sdkSeemsValid(this, targetEnvConfiguration)
diff --git a/python/src/com/jetbrains/python/sdk/PySdkFromEnvironmentVariable.kt b/python/src/com/jetbrains/python/sdk/PySdkFromEnvironmentVariable.kt
index 86d5b744262a..1a36552176cf 100644
--- a/python/src/com/jetbrains/python/sdk/PySdkFromEnvironmentVariable.kt
+++ b/python/src/com/jetbrains/python/sdk/PySdkFromEnvironmentVariable.kt
@@ -8,6 +8,7 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
import com.intellij.util.EnvironmentUtil
import com.intellij.util.ui.EDT
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import org.jetbrains.annotations.ApiStatus
private val LOG = logger()
diff --git a/python/src/com/jetbrains/python/sdk/PySdkRendering.kt b/python/src/com/jetbrains/python/sdk/PySdkRendering.kt
index 2acec690bd48..e1eee044efe3 100644
--- a/python/src/com/jetbrains/python/sdk/PySdkRendering.kt
+++ b/python/src/com/jetbrains/python/sdk/PySdkRendering.kt
@@ -14,7 +14,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.isCondaVirtualEnv
import com.jetbrains.python.isVirtualEnv
import com.jetbrains.python.psi.LanguageLevel
-import com.jetbrains.python.sdk.PythonSdkUtil.isRemote
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
@@ -111,9 +111,9 @@ fun icon(sdk: Sdk): Icon {
* All the others are considered as [PyRenderedSdkType.SYSTEM].
*
* @see Sdk.isAssociatedWithAnotherModule
- * @see PythonSdkUtil.isVirtualEnv
- * @see PythonSdkUtil.isCondaVirtualEnv
- * @see PythonSdkUtil.isRemote
+ * @see com.jetbrains.python.sdk.legacy.PythonSdkUtil.isVirtualEnv
+ * @see com.jetbrains.python.sdk.legacy.PythonSdkUtil.isCondaVirtualEnv
+ * @see com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote
* @see PyRenderedSdkType
*/
@ApiStatus.Internal
diff --git a/python/src/com/jetbrains/python/sdk/PyUpdateProjectSdkAction.java b/python/src/com/jetbrains/python/sdk/PyUpdateProjectSdkAction.java
index 5faefaa18e12..1d3dd337c6b5 100644
--- a/python/src/com/jetbrains/python/sdk/PyUpdateProjectSdkAction.java
+++ b/python/src/com/jetbrains/python/sdk/PyUpdateProjectSdkAction.java
@@ -10,6 +10,7 @@ import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/sdk/PyVirtualEnvVcsCustomizer.kt b/python/src/com/jetbrains/python/sdk/PyVirtualEnvVcsCustomizer.kt
index 9430f9ec1e08..49a2608e54e8 100644
--- a/python/src/com/jetbrains/python/sdk/PyVirtualEnvVcsCustomizer.kt
+++ b/python/src/com/jetbrains/python/sdk/PyVirtualEnvVcsCustomizer.kt
@@ -16,6 +16,7 @@ import com.intellij.remote.RemoteSdkAdditionalData
import com.intellij.ui.dsl.builder.Panel
import com.intellij.ui.dsl.builder.bindSelected
import com.jetbrains.python.PyBundle
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
internal class PyVirtualEnvVcsCustomizer : VcsEnvCustomizer() {
override fun customizeCommandAndEnvironment(project: Project?, envs: MutableMap, context: VcsExecutableContext) {
diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java
index e2157e733301..45fe959fa419 100644
--- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java
+++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java
@@ -42,6 +42,7 @@ import com.jetbrains.python.remote.PythonRemoteInterpreterManager;
import com.jetbrains.python.sdk.add.PyAddSdkDialog;
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.target.PyDetectedSdkAdditionalData;
import com.jetbrains.python.target.PyInterpreterVersionUtil;
import com.jetbrains.python.target.PyTargetAwareAdditionalData;
diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkUpdateProjectActivity.kt b/python/src/com/jetbrains/python/sdk/PythonSdkUpdateProjectActivity.kt
index 195a41e869fb..4c414607f58e 100644
--- a/python/src/com/jetbrains/python/sdk/PythonSdkUpdateProjectActivity.kt
+++ b/python/src/com/jetbrains/python/sdk/PythonSdkUpdateProjectActivity.kt
@@ -16,7 +16,7 @@ import com.intellij.util.cancelOnDispose
import com.jetbrains.python.packaging.common.PythonPackageManagementListener
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
-import com.jetbrains.python.sdk.PythonSdkUtil.getSitePackagesDirectory
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil.getSitePackagesDirectory
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java
index 26174fa40f69..dee83e02be7b 100644
--- a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java
+++ b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java
@@ -50,6 +50,7 @@ import com.jetbrains.python.packaging.management.PythonPackageManagerExt;
import com.jetbrains.python.psi.PyUtil;
import com.jetbrains.python.remote.UnsupportedPythonSdkTypeException;
import com.jetbrains.python.sdk.headless.PythonActivityKey;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.ApiStatus;
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/CustomNewEnvironmentCreator.kt b/python/src/com/jetbrains/python/sdk/add/v2/CustomNewEnvironmentCreator.kt
index 73480ce75e84..819bfe0c366f 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/CustomNewEnvironmentCreator.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/CustomNewEnvironmentCreator.kt
@@ -18,6 +18,7 @@ import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.statistics.InterpreterCreationMode
import com.jetbrains.python.statistics.InterpreterType
import kotlinx.coroutines.CoroutineScope
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/hatch/HatchExistingEnvironmentSelector.kt b/python/src/com/jetbrains/python/sdk/add/v2/hatch/HatchExistingEnvironmentSelector.kt
index 7cfbd511ce27..362eeb1f1148 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/hatch/HatchExistingEnvironmentSelector.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/hatch/HatchExistingEnvironmentSelector.kt
@@ -15,7 +15,7 @@ import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.onSuccess
import com.jetbrains.python.sdk.impl.resolvePythonBinary
import com.jetbrains.python.sdk.ModuleOrProject
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.add.v2.PythonExistingEnvironmentConfigurator
import com.jetbrains.python.sdk.add.v2.PythonInterpreterCreationTargets
import com.jetbrains.python.sdk.add.v2.PythonMutableTargetAddInterpreterModel
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/models.kt b/python/src/com/jetbrains/python/sdk/add/v2/models.kt
index 834653eb62d7..a8abd68c16f7 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/models.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/models.kt
@@ -42,6 +42,7 @@ import com.jetbrains.python.sdk.conda.suggestCondaPath
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.pipenv.getPipEnvExecutable
import com.jetbrains.python.sdk.poetry.getPoetryExecutable
import com.jetbrains.python.sdk.uv.impl.getUvExecutable
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/poetry/PoetryExistingEnvironmentSelector.kt b/python/src/com/jetbrains/python/sdk/add/v2/poetry/PoetryExistingEnvironmentSelector.kt
index 56a570b6237b..d05591caa917 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/poetry/PoetryExistingEnvironmentSelector.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/poetry/PoetryExistingEnvironmentSelector.kt
@@ -9,7 +9,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.Result
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.ModuleOrProject
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.add.v2.CustomExistingEnvironmentSelector
import com.jetbrains.python.sdk.add.v2.DetectedSelectableInterpreter
import com.jetbrains.python.sdk.add.v2.PythonMutableTargetAddInterpreterModel
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/uv/UvExistingEnvironmentSelector.kt b/python/src/com/jetbrains/python/sdk/add/v2/uv/UvExistingEnvironmentSelector.kt
index ef6dfd2987ed..6653a789ebf8 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/uv/UvExistingEnvironmentSelector.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/uv/UvExistingEnvironmentSelector.kt
@@ -8,7 +8,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.Result
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.ModuleOrProject
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.add.v2.CustomExistingEnvironmentSelector
import com.jetbrains.python.sdk.add.v2.DetectedSelectableInterpreter
import com.jetbrains.python.sdk.add.v2.PythonMutableTargetAddInterpreterModel
diff --git a/python/src/com/jetbrains/python/sdk/flavors/VirtualEnvSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/VirtualEnvSdkFlavor.java
index e40ddec87f33..0b0a89a89f5c 100644
--- a/python/src/com/jetbrains/python/sdk/flavors/VirtualEnvSdkFlavor.java
+++ b/python/src/com/jetbrains/python/sdk/flavors/VirtualEnvSdkFlavor.java
@@ -11,7 +11,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.icons.PythonIcons;
import com.jetbrains.python.sdk.BasePySdkExtKt;
import com.jetbrains.python.sdk.PySdkExtKt;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.venvReader.VirtualEnvReader;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/sdk/flavors/conda/CondaEnvSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/conda/CondaEnvSdkFlavor.java
index 19c9186324bd..0094b1d6e5bf 100644
--- a/python/src/com/jetbrains/python/sdk/flavors/conda/CondaEnvSdkFlavor.java
+++ b/python/src/com/jetbrains/python/sdk/flavors/conda/CondaEnvSdkFlavor.java
@@ -12,7 +12,7 @@ import com.jetbrains.python.icons.PythonIcons;
import com.jetbrains.python.pathValidation.PathValidatorKt;
import com.jetbrains.python.pathValidation.PlatformAndRoot;
import com.jetbrains.python.pathValidation.ValidationRequest;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/sdk/pipenv/PipEnvPipFileWatcher.kt b/python/src/com/jetbrains/python/sdk/pipenv/PipEnvPipFileWatcher.kt
index 6b16ea607eee..7a417bb035b8 100644
--- a/python/src/com/jetbrains/python/sdk/pipenv/PipEnvPipFileWatcher.kt
+++ b/python/src/com/jetbrains/python/sdk/pipenv/PipEnvPipFileWatcher.kt
@@ -25,6 +25,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.onFailure
import com.jetbrains.python.packaging.utils.PyPackageCoroutine
import com.jetbrains.python.sdk.*
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil
import com.jetbrains.python.statistics.PipfileWatcherIdsHolder.Companion.RUN_PIPENV_LOCK_SUGGESTION
import com.jetbrains.python.util.ShowingMessageErrorSync
import kotlinx.coroutines.Dispatchers
@@ -111,7 +112,7 @@ internal class PipEnvPipFileWatcher : EditorFactoryListener {
}
withContext(Dispatchers.Default) {
- PythonSdkUtil.getSitePackagesDirectory(sdk)?.refresh(true, true)
+ PySkeletonUtil.getSitePackagesDirectory(sdk)?.refresh(true, true)
sdk.associatedModuleDir?.refresh(true, false)
}
}
diff --git a/python/src/com/jetbrains/python/sdk/pipenv/pipenv.kt b/python/src/com/jetbrains/python/sdk/pipenv/pipenv.kt
index 6e356a1d79c5..07b7af11678e 100644
--- a/python/src/com/jetbrains/python/sdk/pipenv/pipenv.kt
+++ b/python/src/com/jetbrains/python/sdk/pipenv/pipenv.kt
@@ -5,7 +5,7 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.NlsSafe
import com.intellij.util.PathUtil
import com.jetbrains.python.icons.PythonIcons
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import org.jetbrains.annotations.ApiStatus.Internal
import javax.swing.Icon
diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageVersionsInspection.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageVersionsInspection.kt
index 52378fdf21a2..1c4fd910e9ba 100644
--- a/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageVersionsInspection.kt
+++ b/python/src/com/jetbrains/python/sdk/poetry/PoetryPackageVersionsInspection.kt
@@ -17,7 +17,7 @@ import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.python.PyBundle
import com.jetbrains.python.packaging.PyPackageName
import com.jetbrains.python.packaging.management.PythonPackageManager
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.findAmongRoots
import org.toml.lang.psi.TomlKeyValue
import org.toml.lang.psi.TomlTable
diff --git a/python/src/com/jetbrains/python/sdk/poetry/poetry.kt b/python/src/com/jetbrains/python/sdk/poetry/poetry.kt
index a76f357528b9..6f1cce7e34f3 100644
--- a/python/src/com/jetbrains/python/sdk/poetry/poetry.kt
+++ b/python/src/com/jetbrains/python/sdk/poetry/poetry.kt
@@ -15,7 +15,7 @@ import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.packaging.common.PythonOutdatedPackage
import com.jetbrains.python.sdk.impl.resolvePythonBinary
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.createSdk
import com.jetbrains.python.sdk.getOrCreateAdditionalData
import org.jetbrains.annotations.ApiStatus.Internal
diff --git a/python/src/com/jetbrains/python/sdk/readOnly/PythonSdkReadOnlyProvider.kt b/python/src/com/jetbrains/python/sdk/readOnly/PythonSdkReadOnlyProvider.kt
index ad467864fcfc..c31dfd7dd0bb 100644
--- a/python/src/com/jetbrains/python/sdk/readOnly/PythonSdkReadOnlyProvider.kt
+++ b/python/src/com/jetbrains/python/sdk/readOnly/PythonSdkReadOnlyProvider.kt
@@ -3,7 +3,7 @@ package com.jetbrains.python.sdk.readOnly
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.projectRoots.Sdk
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
diff --git a/python/src/com/jetbrains/python/sdk/skeletons/DefaultPregeneratedSkeletonsProvider.java b/python/src/com/jetbrains/python/sdk/skeletons/DefaultPregeneratedSkeletonsProvider.java
index 9822ad66297c..9c83c63e6801 100644
--- a/python/src/com/jetbrains/python/sdk/skeletons/DefaultPregeneratedSkeletonsProvider.java
+++ b/python/src/com/jetbrains/python/sdk/skeletons/DefaultPregeneratedSkeletonsProvider.java
@@ -16,7 +16,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.io.ZipUtil;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.PyNames;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java
index d5a55c824570..05271b38dc10 100644
--- a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java
+++ b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java
@@ -22,9 +22,9 @@ import com.jetbrains.python.codeInsight.typing.PyTypeShed;
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase;
import com.jetbrains.python.remote.PyRemoteSkeletonGeneratorFactory;
import com.jetbrains.python.sdk.InvalidSdkException;
-import com.jetbrains.python.sdk.PySdkUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeleton.PySkeletonHeader;
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -129,7 +129,7 @@ public class PySkeletonRefresher {
final PyPregeneratedSkeletons preGeneratedSkeletons =
PyPregeneratedSkeletonsProvider.findPregeneratedSkeletonsForSdk(mySdk, myGeneratorVersion);
- final String builtinsFileName = PySdkUtil.getBuiltinsFileName(mySdk);
+ final String builtinsFileName = PySkeletonUtil.getBuiltinsFileName(mySdk);
final File builtinsFile = new File(skeletonsPath, builtinsFileName);
final PySkeletonHeader oldHeader = PySkeletonHeader.readSkeletonHeader(builtinsFile);
@@ -271,7 +271,7 @@ public class PySkeletonRefresher {
if (PyNames.INIT_DOT_PY.equals(itemName) && item.length() == 0) continue; // these are versionless
if (PySkeletonGenerator.BLACKLIST_FILE_NAME.equals(itemName)) continue; // don't touch the blacklist
if (PySkeletonGenerator.STATE_MARKER_FILE.equals(itemName)) continue;
- if (PySdkUtil.getBuiltinsFileName(mySdk).equals(itemName)) {
+ if (PySkeletonUtil.getBuiltinsFileName(mySdk).equals(itemName)) {
continue;
}
final PySkeletonHeader header = PySkeletonHeader.readSkeletonHeader(item);
diff --git a/python/src/com/jetbrains/python/sdk/uv/UvExt.kt b/python/src/com/jetbrains/python/sdk/uv/UvExt.kt
index f71325260bd3..ea4c96425f1e 100644
--- a/python/src/com/jetbrains/python/sdk/uv/UvExt.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/UvExt.kt
@@ -7,7 +7,7 @@ import com.intellij.python.pyproject.PY_PROJECT_TOML
import com.intellij.util.PathUtil
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.icons.PythonIcons
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.createSdk
import com.jetbrains.python.sdk.getOrCreateAdditionalData
import com.jetbrains.python.sdk.uv.impl.createUvCli
diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt
index 9b4c59f3dc90..bc7bb3381c94 100644
--- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfiguration.kt
@@ -15,7 +15,7 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.Result
import com.jetbrains.python.onFailure
import com.jetbrains.python.run.AbstractPythonRunConfiguration
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.associatedModulePath
import com.jetbrains.python.sdk.pythonSdk
import com.jetbrains.python.sdk.uv.UvSdkAdditionalData
@@ -41,7 +41,7 @@ data class UvRunConfigurationOptions(
var uvArgs: List = listOf()
) {
val uvSdk: Sdk?
- get() = uvSdkKey?.let {PythonSdkUtil.findSdkByKey(it)}
+ get() = uvSdkKey?.let { PythonSdkUtil.findSdkByKey(it)}
val workingDirectory: Path?
get() = (uvSdk?.sdkAdditionalData as? UvSdkAdditionalData)?.uvWorkingDirectory
diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunSettingsEditor.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunSettingsEditor.kt
index 11859f25ab14..93f448e1a845 100644
--- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunSettingsEditor.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/run/UvRunSettingsEditor.kt
@@ -21,7 +21,7 @@ import com.intellij.ui.dsl.builder.panel
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.PySdkListCellRenderer
import com.jetbrains.python.sdk.PythonSdkType
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.sdkSeemsValid
import com.jetbrains.python.sdk.uv.isUv
import org.jetbrains.annotations.ApiStatus
diff --git a/python/src/com/jetbrains/python/spellchecker/PythonSpellcheckerGenerateDictionariesAction.java b/python/src/com/jetbrains/python/spellchecker/PythonSpellcheckerGenerateDictionariesAction.java
index 751a9c744344..f01f39ee4555 100644
--- a/python/src/com/jetbrains/python/spellchecker/PythonSpellcheckerGenerateDictionariesAction.java
+++ b/python/src/com/jetbrains/python/spellchecker/PythonSpellcheckerGenerateDictionariesAction.java
@@ -10,7 +10,7 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.vfs.VirtualFile;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
diff --git a/python/src/com/jetbrains/python/statistics/PyPackageDaemonListener.kt b/python/src/com/jetbrains/python/statistics/PyPackageDaemonListener.kt
index 2262620138b5..31ff1a3e3b23 100644
--- a/python/src/com/jetbrains/python/statistics/PyPackageDaemonListener.kt
+++ b/python/src/com/jetbrains/python/statistics/PyPackageDaemonListener.kt
@@ -21,7 +21,7 @@ import com.jetbrains.python.PyPsiPackageUtil
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.psi.PyFile
import com.jetbrains.python.psi.PyImportStatementBase
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
diff --git a/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt b/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt
index 2a6f3c69ef9f..f961c615620f 100644
--- a/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt
+++ b/python/src/com/jetbrains/python/statistics/PyPackageUsagesCollector.kt
@@ -14,7 +14,7 @@ import com.jetbrains.python.packaging.PyPIPackageCache
import com.jetbrains.python.packaging.PyPackageName
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.sdk.PythonSdkAdditionalData
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
/**
* Reports usages of packages and versions
diff --git a/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt b/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt
index d1d4d5bef23a..7a21eb3c611c 100644
--- a/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt
+++ b/python/src/com/jetbrains/python/statistics/PyStatisticTools.kt
@@ -18,7 +18,7 @@ import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase
import com.jetbrains.python.sdk.PySdkUtil
import com.jetbrains.python.sdk.PythonSdkAdditionalData
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.sdk.flavors.conda.CondaEnvSdkFlavor
import com.jetbrains.python.sdk.pipenv.isPipEnv
diff --git a/python/src/com/jetbrains/python/target/PyDetectedSdkOnTarget.kt b/python/src/com/jetbrains/python/target/PyDetectedSdkOnTarget.kt
index d48e0b4928c7..dffa8316040b 100644
--- a/python/src/com/jetbrains/python/target/PyDetectedSdkOnTarget.kt
+++ b/python/src/com/jetbrains/python/target/PyDetectedSdkOnTarget.kt
@@ -11,7 +11,7 @@ import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import org.jdom.Element
/**
- * Allows passing SDK with such additional data [com.jetbrains.python.sdk.PythonSdkUtil.isRemote] check.
+ * Allows passing SDK with such additional data [com.jetbrains.python.sdk.legacy.PythonSdkUtil.isRemote] check.
*
* This class is meant for use in UI and should be used with caution.
*/
diff --git a/python/src/com/jetbrains/python/testing/PyTestsShared.kt b/python/src/com/jetbrains/python/testing/PyTestsShared.kt
index 9681516ce47e..a518e3513460 100644
--- a/python/src/com/jetbrains/python/testing/PyTestsShared.kt
+++ b/python/src/com/jetbrains/python/testing/PyTestsShared.kt
@@ -60,7 +60,7 @@ import com.jetbrains.python.run.targetBasedConfiguration.PyRunTargetVariant
import com.jetbrains.python.run.targetBasedConfiguration.TargetWithVariant
import com.jetbrains.python.run.targetBasedConfiguration.createRefactoringListenerIfPossible
import com.jetbrains.python.run.targetBasedConfiguration.targetAsPsiElement
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.baseDir
import com.jetbrains.python.testing.doctest.PythonDocTestUtil
import jetbrains.buildServer.messages.serviceMessages.ServiceMessage
diff --git a/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java b/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java
index 15eb7b2e1907..7779ea137d98 100644
--- a/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java
+++ b/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java
@@ -29,7 +29,7 @@ import com.jetbrains.python.console.PydevConsoleRunnerImpl;
import com.jetbrains.python.console.PythonDebugLanguageConsoleView;
import com.jetbrains.python.run.*;
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.concurrency.AsyncPromise;
diff --git a/python/src/com/jetbrains/python/testing/PythonUnitTestDetectorsBasedOnSettings.java b/python/src/com/jetbrains/python/testing/PythonUnitTestDetectorsBasedOnSettings.java
index 6651358e4e40..1c0667bf112d 100644
--- a/python/src/com/jetbrains/python/testing/PythonUnitTestDetectorsBasedOnSettings.java
+++ b/python/src/com/jetbrains/python/testing/PythonUnitTestDetectorsBasedOnSettings.java
@@ -10,7 +10,7 @@ import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.psi.types.TypeEvalContext;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/testing/TestRunnerDetector.java b/python/src/com/jetbrains/python/testing/TestRunnerDetector.java
index 7dbd88f4f42d..b1242dd2971d 100644
--- a/python/src/com/jetbrains/python/testing/TestRunnerDetector.java
+++ b/python/src/com/jetbrains/python/testing/TestRunnerDetector.java
@@ -16,7 +16,7 @@ import com.jetbrains.python.packaging.management.PythonPackageManager;
import com.jetbrains.python.packaging.management.PythonPackageManagerExt;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java b/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java
index 1a30ae5cb757..a5c187bb36e4 100644
--- a/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java
+++ b/python/src/com/jetbrains/python/validation/Pep8ExternalAnnotator.java
@@ -49,7 +49,7 @@ import com.jetbrains.python.psi.impl.PyPsiUtils;
import com.jetbrains.python.sdk.PreferredSdkComparator;
import com.jetbrains.python.sdk.PySdkUtil;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
diff --git a/python/testFramework/src/com/jetbrains/python/tools/sdkTools/PySdkTools.java b/python/testFramework/src/com/jetbrains/python/tools/sdkTools/PySdkTools.java
index 29fa619f23cc..c7d92b00f77a 100644
--- a/python/testFramework/src/com/jetbrains/python/tools/sdkTools/PySdkTools.java
+++ b/python/testFramework/src/com/jetbrains/python/tools/sdkTools/PySdkTools.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.jetbrains.python.sdk.*;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/testSrc/com/jetbrains/env/python/PythonSkeletonsTest.java b/python/testSrc/com/jetbrains/env/python/PythonSkeletonsTest.java
index 247cf543736b..b6de2c0781a6 100644
--- a/python/testSrc/com/jetbrains/env/python/PythonSkeletonsTest.java
+++ b/python/testSrc/com/jetbrains/env/python/PythonSkeletonsTest.java
@@ -36,7 +36,7 @@ import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.resolve.PythonSdkPathCache;
import com.jetbrains.python.pyi.PyiFile;
import com.jetbrains.python.pyi.PyiUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.skeleton.PySkeletonHeader;
import com.jetbrains.python.toolbox.Maybe;
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
diff --git a/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java b/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java
index 9c380a1f2199..7f12e9f5e2c7 100644
--- a/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java
+++ b/python/testSrc/com/jetbrains/python/Py3QuickDocTest.java
@@ -12,7 +12,7 @@ import com.jetbrains.python.fixtures.LightMarkedTestCase;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
diff --git a/python/testSrc/com/jetbrains/python/PyIndexingTest.java b/python/testSrc/com/jetbrains/python/PyIndexingTest.java
index bf3ced82d420..b39f60c7ce39 100644
--- a/python/testSrc/com/jetbrains/python/PyIndexingTest.java
+++ b/python/testSrc/com/jetbrains/python/PyIndexingTest.java
@@ -14,7 +14,7 @@ import com.intellij.util.indexing.FileBasedIndex;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.search.PySearchUtilBase;
import com.jetbrains.python.psi.stubs.PyModuleNameIndex;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
diff --git a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java
index 87557661fec2..6dde9d131674 100644
--- a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java
+++ b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java
@@ -24,7 +24,8 @@ import com.jetbrains.python.psi.stubs.PyClassNameIndex;
import com.jetbrains.python.psi.types.PyClassType;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
+import com.jetbrains.python.sdk.skeleton.PySkeletonUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
@@ -432,7 +433,7 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
final PsiElement module = doResolve();
assertNotNull(module);
final Sdk moduleSdk = PythonSdkUtil.findPythonSdk(myFixture.getModule());
- assertFalse(PythonSdkUtil.isStdLib(module.getContainingFile().getVirtualFile(), moduleSdk));
+ assertFalse(PySkeletonUtil.isStdLib(module.getContainingFile().getVirtualFile(), moduleSdk));
}
// PY-18626
diff --git a/python/testSrc/com/jetbrains/python/PyOverloadsProcessingPerformanceTest.java b/python/testSrc/com/jetbrains/python/PyOverloadsProcessingPerformanceTest.java
index 5c9a4868e2de..11906c0ac835 100644
--- a/python/testSrc/com/jetbrains/python/PyOverloadsProcessingPerformanceTest.java
+++ b/python/testSrc/com/jetbrains/python/PyOverloadsProcessingPerformanceTest.java
@@ -27,7 +27,7 @@ import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.psi.PyReferenceExpression;
import com.jetbrains.python.psi.types.TypeEvalContext;
import com.jetbrains.python.pyi.PyiUtil;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
@SkipSlowTestLocally
diff --git a/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java b/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java
index 9f95b9eba136..9609e7e86cb0 100644
--- a/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java
+++ b/python/testSrc/com/jetbrains/python/PythonInspectionsTest.java
@@ -11,7 +11,7 @@ import com.jetbrains.python.inspections.*;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.Nullable;
diff --git a/python/testSrc/com/jetbrains/python/PythonMockSdk.java b/python/testSrc/com/jetbrains/python/PythonMockSdk.java
index 981bcdd63c4e..3fd9bc7870ad 100644
--- a/python/testSrc/com/jetbrains/python/PythonMockSdk.java
+++ b/python/testSrc/com/jetbrains/python/PythonMockSdk.java
@@ -11,7 +11,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.codeInsight.typing.PyTypeShed;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.flavors.PyFlavorAndData;
import com.jetbrains.python.sdk.flavors.PyFlavorData;
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor;
diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java
index af4ea776e435..e5ba4d43a567 100644
--- a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java
+++ b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java
@@ -59,7 +59,7 @@ import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher;
import com.jetbrains.python.psi.search.PySearchUtilBase;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.Assert;
diff --git a/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
index 2ae6e93abb68..0c0569fa9817 100644
--- a/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
+++ b/python/testSrc/com/jetbrains/python/inspections/PyPackageRequirementsInspectionTest.java
@@ -11,7 +11,7 @@ import com.jetbrains.python.packaging.common.PythonPackage;
import com.jetbrains.python.packaging.management.RequirementsProviderType;
import com.jetbrains.python.packaging.management.TestPythonPackageManager;
import com.jetbrains.python.psi.LanguageLevel;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.SdksKt;
import com.jetbrains.python.sdk.pipenv.PipEnvParser;
import org.jetbrains.annotations.NotNull;
diff --git a/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java b/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java
index d8f8103b386a..0018328961bb 100644
--- a/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java
+++ b/python/testSrc/com/jetbrains/python/packaging/PyPackageUtilTest.java
@@ -25,7 +25,7 @@ import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyCallExpression;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.PyFile;
-import com.jetbrains.python.sdk.PythonSdkUtil;
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil;
import com.jetbrains.python.sdk.SdksKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/python/testSrc/com/jetbrains/python/packaging/PyRequirementsGenerationTest.kt b/python/testSrc/com/jetbrains/python/packaging/PyRequirementsGenerationTest.kt
index edf14777cbce..ac933bfccc11 100644
--- a/python/testSrc/com/jetbrains/python/packaging/PyRequirementsGenerationTest.kt
+++ b/python/testSrc/com/jetbrains/python/packaging/PyRequirementsGenerationTest.kt
@@ -13,7 +13,7 @@ import com.intellij.testFramework.registerServiceInstance
import com.jetbrains.python.fixtures.PyTestCase
import com.jetbrains.python.packaging.common.PythonPackage
import com.jetbrains.python.packaging.management.TestPythonPackageManagerService
-import com.jetbrains.python.sdk.PythonSdkUtil
+import com.jetbrains.python.sdk.legacy.PythonSdkUtil
import com.jetbrains.python.sdk.setAssociationToModuleAsync
import org.easymock.EasyMock