From 84934e9e9e4bd5815a87b5e11f5d6f02eb300f85 Mon Sep 17 00:00:00 2001 From: Vitaly Legchilkin Date: Fri, 10 Oct 2025 00:01:22 +0200 Subject: [PATCH] [python] (IJPL-205889) (BAZEL-2462) don't call getOrCreateAdditionalData for non-python sdks + add requirePythonSdk() verification for the Sdk extension functions, these methods are not designed to be called for non-python sdks and now will throw IllegalArgumentException. also corrects dependency tree: + move PythonSdkUtil to the python.sdk module, remove dependency on psi.impl + create PySkeletonUtil for skeleton utils and leave it in the psi.impl [python] (IJPL-205889) (BAZEL-2462) don't call getOrCreateAdditionalData for non-python sdks + add requirePythonSdk() verification for the Sdk extension functions, these methods are not designed to be called for non-python sdks and now will throw IllegalArgumentException also corrects dependency tree: + move PythonSdkUtil to the python.sdk module, remove dependency on psi.impl + create PySkeletonUtil for skeleton utils and leave it in the psi.impl GitOrigin-RevId: 20d958c5e15cc4e05545b2e61b126b5e015696ed --- python/BUILD.bazel | 2 + python/huggingFace/BUILD.bazel | 1 + ...llij.python.community.impl.huggingFace.iml | 1 + .../service/HuggingFaceLibrariesTracker.kt | 2 +- .../ide/impl/PyIdeCommonOptionsForm.java | 2 +- .../PyPipfileSdkConfiguration.kt | 1 + .../configuration/PyPoetrySdkConfiguration.kt | 4 +- ...equirementsTxtOrSetupPySdkConfiguration.kt | 2 +- .../ide/impl/configuration/PySdkStatusBar.kt | 2 +- .../configuration/PyUvSdkConfiguration.kt | 2 +- .../configuration/PyVenvSdkConfiguration.kt | 1 + python/intellij.python.commonTests.iml | 1 + .../intellij.python.ml.features/BUILD.bazel | 1 + .../intellij.python.ml.features.iml | 1 + .../features/RelevanceEvaluationFeatures.kt | 5 +- .../src/impl/InterpreterServiceImpl.kt | 27 +- .../packaging/PyManagePackagesAction.java | 2 +- .../packaging/PyManagePackagesDialog.java | 2 +- .../impl/run/PyPluginCommonOptionsForm.java | 2 +- .../plugin/impl/run/PyPluginSdkFragment.kt | 2 +- ...mandLineInspectionProjectConfigurator.java | 2 +- .../intellij.python.community.impl.xml | 1 - .../python/PythonCommonCompletionTest.java | 2 +- .../python/fixture/PythonCommonTestCase.java | 2 +- python/python-psi-impl/BUILD.bazel | 1 + .../intellij.python.psi.impl.iml | 1 + .../resources/intellij.python.psi.impl.xml | 1 + .../completion/PyCompletionUtils.kt | 5 +- .../codeInsight/imports/AddImportHelper.java | 5 +- .../imports/PythonImportUtils.java | 2 +- .../stdlib/PyStdlibCanonicalPathProvider.kt | 5 +- .../PyNoneFunctionAssignmentInspection.java | 2 +- .../inspections/PyTypeHintsInspection.kt | 2 +- .../python/psi/impl/PyBuiltinCache.kt | 2 +- .../python/psi/impl/PyFunctionImpl.java | 2 +- .../psi/impl/PythonLanguageLevelPusher.java | 2 +- .../python/psi/resolve/PyResolveImportUtil.kt | 2 +- .../psi/resolve/PythonModulePathCache.java | 2 +- .../psi/resolve/QualifiedNameFinder.java | 2 +- .../psi/search/PySearchScopeBuilder.java | 2 +- .../python/psi/search/PySearchUtilBase.java | 2 +- .../python/psi/types/PyTypeChecker.java | 2 +- .../inline/PyInlineFunctionHandler.kt | 2 +- .../python/sdk/PyRemoteSdkValidator.kt | 17 - .../jetbrains/python/sdk/PySdkExtensions.kt | 1 + .../jetbrains/python/sdk/PythonSdkUtil.java | 487 ++---------------- .../python/sdk/skeleton/PySkeletonUtil.java | 162 ++++++ .../PyAssignTargetAnnotatorVisitor.java | 2 +- .../python/RestPythonPreviewProvider.kt | 2 +- .../restructuredtext/python/RestPythonUtil.kt | 2 +- .../python/SphinxBaseCommand.java | 2 +- python/python-sdk-ui/BUILD.bazel | 1 - .../python-sdk-ui/intellij.python.sdk.ui.iml | 1 - .../sdk/ui/evolution/sdk/EvoModuleSdk.kt | 2 +- python/python-sdk/BUILD.bazel | 2 - python/python-sdk/intellij.python.sdk.iml | 1 - .../resources/intellij.python.sdk.xml | 1 - .../packaging/CondaExecutablesLocator.kt | 2 +- .../python/run/PyVirtualEnvReader.kt | 2 +- .../sdk/PyRemoteSdkAdditionalDataMarker.java | 0 .../jetbrains/python/sdk/PySdkCoreTools.kt | 4 + .../com/jetbrains/python/sdk/PySdkUtil.java | 12 +- .../jetbrains/python/sdk/PythonEnvUtil.java | 6 +- .../src/com/jetbrains/python/sdk/Sdks.kt | 15 + .../python/sdk/flavors/PyFlavorData.kt | 2 +- .../python/sdk/legacy/PythonSdkUtil.java | 434 ++++++++++++++++ .../PyVirtualEnvTerminalCustomizer.kt | 2 +- .../providers/WindowsSystemPythonProvider.kt | 2 +- .../BlackFormatterConfiguration.kt | 2 +- .../mlcompletion/PyCompletionFeatures.kt | 5 +- .../PyStdlibDocumentationLinkProvider.java | 4 +- .../stubs/checkers/PyStubsChecker.kt | 2 +- .../stubs/visitors/PyStubVisitor.kt | 2 +- .../PyActiveSdkConfigurable.java | 4 +- .../PyConfigurableInterpreterList.java | 3 +- .../PyIntegratedToolsConfigurable.java | 2 +- .../PythonInterpreterDetailsConfigurables.kt | 2 +- .../PythonInterpreterMasterDetails.kt | 1 + .../configuration/PythonPathEditor.java | 2 +- .../python/console/PydevConsoleRunnerUtil.kt | 2 +- ...PyDebugNotificationForCythonExtension.java | 2 +- .../python/debugger/PyDebugRunner.java | 2 +- .../attach/PyLocalAttachDebuggerProvider.java | 2 +- .../hatch/sdk/HatchVirtualEnvironmentExt.kt | 2 +- .../com/jetbrains/python/hatch/sdk/SdkExt.kt | 2 +- .../PyCompatibilityInspectionAdvertiser.java | 4 +- .../inspections/PyInterpreterInspection.java | 1 + ...edReferenceDefaultInspectionExtension.java | 2 +- .../quickfix/GenerateBinaryStubsFix.java | 2 +- .../quickfix/InstallAllPackagesQuickFix.kt | 2 +- .../quickfix/InstallPackageQuickFix.kt | 2 +- .../requirement/PyRequirementVisitor.kt | 2 +- .../PyUnresolvedReferencesInspection.kt | 2 +- .../python/packaging/PyDependencyCollector.kt | 2 +- .../python/packaging/PyPackageUtil.java | 2 +- .../python/packaging/PyRequirementsTxtUtil.kt | 2 +- .../packaging/pip/PipPythonPackageManager.kt | 2 +- .../packaging/setupPy/CreateSetupPyAction.kt | 2 +- .../setupPy/SetupTaskChooserAction.java | 2 +- .../PyPackagingToolWindowService.kt | 2 +- .../ui/PyInstalledPackagesPanel.java | 2 +- .../ui/PyPackageManagementService.java | 2 +- .../projectCreation/venvWithSdkCreator.kt | 2 +- .../projectView/PyRemoteLibrariesNode.java | 2 +- .../python/projectView/PySkeletonsNode.java | 2 +- .../projectView/PyTreeStructureProvider.java | 2 +- .../InstallAllRequirementsInTomlQuickFix.kt | 2 +- .../InstallAllRequirementsQuickFix.kt | 2 +- .../run/AbstractPythonRunConfiguration.java | 2 +- .../run/PyRemoteAnalyzeStacktraceFilter.java | 2 +- .../python/run/PythonCommandLineState.java | 1 + .../run/PythonConfigurationFactoryBase.java | 2 +- .../com/jetbrains/python/run/PythonTask.java | 2 +- .../python/run/TargetedPythonPaths.kt | 2 +- .../python/run/configuration/PySdkComboBox.kt | 2 +- .../run/filter/PythonInstallPackageFilter.kt | 2 +- .../run/runAnything/pyRunAnythingUtil.kt | 2 +- .../python/sdk/InterpreterDirectoryMacro.java | 1 + .../python/sdk/PreferredSdkComparator.java | 1 + .../src/com/jetbrains/python/sdk/PySdkExt.kt | 7 +- .../sdk/PySdkFromEnvironmentVariable.kt | 1 + .../jetbrains/python/sdk/PySdkRendering.kt | 8 +- .../python/sdk/PyUpdateProjectSdkAction.java | 1 + .../python/sdk/PyVirtualEnvVcsCustomizer.kt | 1 + .../jetbrains/python/sdk/PythonSdkType.java | 1 + .../sdk/PythonSdkUpdateProjectActivity.kt | 2 +- .../python/sdk/PythonSdkUpdater.java | 1 + .../sdk/add/v2/CustomNewEnvironmentCreator.kt | 1 + .../hatch/HatchExistingEnvironmentSelector.kt | 2 +- .../com/jetbrains/python/sdk/add/v2/models.kt | 1 + .../PoetryExistingEnvironmentSelector.kt | 2 +- .../v2/uv/UvExistingEnvironmentSelector.kt | 2 +- .../sdk/flavors/VirtualEnvSdkFlavor.java | 2 +- .../sdk/flavors/conda/CondaEnvSdkFlavor.java | 2 +- .../python/sdk/pipenv/PipEnvPipFileWatcher.kt | 3 +- .../com/jetbrains/python/sdk/pipenv/pipenv.kt | 2 +- .../poetry/PoetryPackageVersionsInspection.kt | 2 +- .../com/jetbrains/python/sdk/poetry/poetry.kt | 2 +- .../sdk/readOnly/PythonSdkReadOnlyProvider.kt | 2 +- .../DefaultPregeneratedSkeletonsProvider.java | 2 +- .../sdk/skeletons/PySkeletonRefresher.java | 8 +- .../src/com/jetbrains/python/sdk/uv/UvExt.kt | 2 +- .../python/sdk/uv/run/UvRunConfiguration.kt | 4 +- .../python/sdk/uv/run/UvRunSettingsEditor.kt | 2 +- ...pellcheckerGenerateDictionariesAction.java | 2 +- .../statistics/PyPackageDaemonListener.kt | 2 +- .../statistics/PyPackageUsagesCollector.kt | 2 +- .../python/statistics/PyStatisticTools.kt | 2 +- .../python/target/PyDetectedSdkOnTarget.kt | 2 +- .../jetbrains/python/testing/PyTestsShared.kt | 2 +- .../PythonTestCommandLineStateBase.java | 2 +- ...ythonUnitTestDetectorsBasedOnSettings.java | 2 +- .../python/testing/TestRunnerDetector.java | 2 +- .../validation/Pep8ExternalAnnotator.java | 2 +- .../python/tools/sdkTools/PySdkTools.java | 1 + .../env/python/PythonSkeletonsTest.java | 2 +- .../com/jetbrains/python/Py3QuickDocTest.java | 2 +- .../com/jetbrains/python/PyIndexingTest.java | 2 +- .../python/PyMultiFileResolveTest.java | 5 +- .../PyOverloadsProcessingPerformanceTest.java | 2 +- .../python/PythonInspectionsTest.java | 2 +- .../com/jetbrains/python/PythonMockSdk.java | 2 +- .../jetbrains/python/fixtures/PyTestCase.java | 2 +- .../PyPackageRequirementsInspectionTest.java | 2 +- .../python/packaging/PyPackageUtilTest.java | 2 +- .../packaging/PyRequirementsGenerationTest.kt | 2 +- 166 files changed, 838 insertions(+), 656 deletions(-) delete mode 100644 python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkValidator.kt create mode 100644 python/python-psi-impl/src/com/jetbrains/python/sdk/skeleton/PySkeletonUtil.java rename python/{python-psi-impl => python-sdk}/src/com/jetbrains/python/sdk/PyRemoteSdkAdditionalDataMarker.java (100%) rename python/{python-psi-impl => python-sdk}/src/com/jetbrains/python/sdk/PythonEnvUtil.java (97%) create mode 100644 python/python-sdk/src/com/jetbrains/python/sdk/legacy/PythonSdkUtil.java diff --git a/python/BUILD.bazel b/python/BUILD.bazel index df6d240ee3f5..e63c3963b92d 100644 --- a/python/BUILD.bazel +++ b/python/BUILD.bazel @@ -196,6 +196,8 @@ jvm_library( "//python/openapi:community", "//python/openapi:community_test_lib", "//python/impl.helperLocator:community-helpersLocator", + "//python/python-sdk:sdk", + "//python/python-sdk:sdk_test_lib", ] ) ### auto-generated section `build intellij.python.commonTests` end diff --git a/python/huggingFace/BUILD.bazel b/python/huggingFace/BUILD.bazel index ee5694973cc1..45363dca99ec 100644 --- a/python/huggingFace/BUILD.bazel +++ b/python/huggingFace/BUILD.bazel @@ -34,6 +34,7 @@ jvm_library( "//platform/markdown-utils", "//platform/statistics", "//json/backend", + "//python/python-sdk:sdk", ] ) ### auto-generated section `build intellij.python.community.impl.huggingFace` end \ No newline at end of file diff --git a/python/huggingFace/intellij.python.community.impl.huggingFace.iml b/python/huggingFace/intellij.python.community.impl.huggingFace.iml index d5627d9cb4a3..8d0b5e59359c 100644 --- a/python/huggingFace/intellij.python.community.impl.huggingFace.iml +++ b/python/huggingFace/intellij.python.community.impl.huggingFace.iml @@ -29,5 +29,6 @@ + \ No newline at end of file diff --git a/python/huggingFace/src/com/intellij/python/community/impl/huggingFace/service/HuggingFaceLibrariesTracker.kt b/python/huggingFace/src/com/intellij/python/community/impl/huggingFace/service/HuggingFaceLibrariesTracker.kt index 26fa99597694..95f8c918d190 100644 --- a/python/huggingFace/src/com/intellij/python/community/impl/huggingFace/service/HuggingFaceLibrariesTracker.kt +++ b/python/huggingFace/src/com/intellij/python/community/impl/huggingFace/service/HuggingFaceLibrariesTracker.kt @@ -11,7 +11,7 @@ import com.intellij.util.messages.MessageBusConnection import com.jetbrains.python.packaging.common.PythonPackageManagementListener import com.jetbrains.python.packaging.management.PythonPackageManager import com.jetbrains.python.packaging.management.hasInstalledPackage -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PyIdeCommonOptionsForm.java b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PyIdeCommonOptionsForm.java index ac068e0ac8d3..b3bffb05f4b4 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PyIdeCommonOptionsForm.java +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/PyIdeCommonOptionsForm.java @@ -18,7 +18,7 @@ import com.jetbrains.python.configuration.PyConfigurableInterpreterList; import com.jetbrains.python.run.AbstractPyCommonOptionsForm; import com.jetbrains.python.run.PyCommonOptionsFormData; import com.jetbrains.python.sdk.PySdkListCellRenderer; -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/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPipfileSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPipfileSdkConfiguration.kt index 7522a5cb8074..67a69507411c 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPipfileSdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPipfileSdkConfiguration.kt @@ -24,6 +24,7 @@ import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.getOrLogException import com.jetbrains.python.sdk.* import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.pipenv.* import com.jetbrains.python.sdk.pipenv.ui.PyAddNewPipEnvFromFilePanel import com.jetbrains.python.venvReader.VirtualEnvReader diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt index 0722f8dc499c..e9813c212884 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyPoetrySdkConfiguration.kt @@ -3,7 +3,6 @@ package com.intellij.pycharm.community.ide.impl.configuration import com.intellij.openapi.application.EDT import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.extensions.ExtensionNotApplicableException import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil @@ -13,7 +12,6 @@ import com.intellij.platform.ide.progress.withBackgroundProgress import com.intellij.platform.util.progress.reportRawProgress import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle import com.intellij.python.pyproject.PyProjectToml -import com.intellij.python.pyproject.model.internal.projectModelEnabled import com.jetbrains.python.PyBundle import com.jetbrains.python.ToolId import com.jetbrains.python.errorProcessing.PyResult @@ -21,7 +19,7 @@ import com.jetbrains.python.poetry.findPoetryLock import com.jetbrains.python.poetry.getPyProjectTomlForPoetry import com.jetbrains.python.projectModel.poetry.POETRY_TOOL_ID import com.jetbrains.python.sdk.PythonSdkType -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.basePath import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension import com.jetbrains.python.sdk.impl.resolvePythonBinary diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyRequirementsTxtOrSetupPySdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyRequirementsTxtOrSetupPySdkConfiguration.kt index 7839cd5e6850..d558cab95624 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyRequirementsTxtOrSetupPySdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyRequirementsTxtOrSetupPySdkConfiguration.kt @@ -31,7 +31,7 @@ import com.jetbrains.python.packaging.PyPackageUtil import com.jetbrains.python.packaging.management.PythonPackageManager import com.jetbrains.python.packaging.requirementsTxt.PythonRequirementTxtSdkUtils import com.jetbrains.python.packaging.setupPy.SetupPyManager -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.basePath import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension import com.jetbrains.python.sdk.configuration.createVirtualEnvAndSdkSynchronously diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt index d53b5f87f9e7..b8480fedd9dc 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt @@ -25,7 +25,7 @@ import com.jetbrains.python.PythonIdeLanguageCustomization import com.jetbrains.python.sdk.PySdkPopupFactory import com.jetbrains.python.sdk.PySdkPopupFactory.Companion.descriptionInPopup import com.jetbrains.python.sdk.PySdkPopupFactory.Companion.shortenNameInPopup -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.noInterpreterMarker import kotlinx.coroutines.CoroutineScope diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt index ad52c80cba5a..3b3dcf23d505 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyUvSdkConfiguration.kt @@ -17,7 +17,7 @@ import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.getOrLogException import com.jetbrains.python.onSuccess import com.jetbrains.python.projectModel.uv.UV_TOOL_ID -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.basePath import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension import com.jetbrains.python.sdk.persist diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyVenvSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyVenvSdkConfiguration.kt index e435a3d2acca..44ae68a7372a 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyVenvSdkConfiguration.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyVenvSdkConfiguration.kt @@ -10,6 +10,7 @@ import com.jetbrains.python.errorProcessing.MessageError import com.jetbrains.python.errorProcessing.PyResult import com.jetbrains.python.sdk.* import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.jetbrains.annotations.ApiStatus diff --git a/python/intellij.python.commonTests.iml b/python/intellij.python.commonTests.iml index 953420283d0d..6ce37ddbba15 100644 --- a/python/intellij.python.commonTests.iml +++ b/python/intellij.python.commonTests.iml @@ -23,5 +23,6 @@ + \ No newline at end of file diff --git a/python/intellij.python.ml.features/BUILD.bazel b/python/intellij.python.ml.features/BUILD.bazel index 6f71257bc70d..6a4542d93598 100644 --- a/python/intellij.python.ml.features/BUILD.bazel +++ b/python/intellij.python.ml.features/BUILD.bazel @@ -26,6 +26,7 @@ jvm_library( "//platform/platform-api:ide", "//platform/platform-impl:ide-impl", "//python:python-community-impl", + "//python/python-sdk:sdk", "//platform/util/concurrency", "//platform/core-ui", "//platform/platform-impl/codeinsight-inline:ide-codeinsight-inline", diff --git a/python/intellij.python.ml.features/intellij.python.ml.features.iml b/python/intellij.python.ml.features/intellij.python.ml.features.iml index 7d7f1f0a470b..3afa593ccdf4 100644 --- a/python/intellij.python.ml.features/intellij.python.ml.features.iml +++ b/python/intellij.python.ml.features/intellij.python.ml.features.iml @@ -20,6 +20,7 @@ + diff --git a/python/intellij.python.ml.features/src/com/intellij/python/ml/features/imports/features/RelevanceEvaluationFeatures.kt b/python/intellij.python.ml.features/src/com/intellij/python/ml/features/imports/features/RelevanceEvaluationFeatures.kt index c27c9b9562f7..0353486bdc5b 100644 --- a/python/intellij.python.ml.features/src/com/intellij/python/ml/features/imports/features/RelevanceEvaluationFeatures.kt +++ b/python/intellij.python.ml.features/src/com/intellij/python/ml/features/imports/features/RelevanceEvaluationFeatures.kt @@ -11,7 +11,8 @@ import com.jetbrains.mlapi.feature.Feature import com.jetbrains.mlapi.feature.FeatureContainer import com.jetbrains.mlapi.feature.FeatureDeclaration import com.jetbrains.mlapi.feature.FeatureSet -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil +import com.jetbrains.python.sdk.skeleton.PySkeletonUtil enum class UnderscoresType { NO_UNDERSCORES, // something (without underscores) @@ -58,7 +59,7 @@ object RelevanceEvaluationFeatures : ImportCandidateFeatures(Features) { add(Features.MODULE_SOURCE_TYPE with readAction { when { - PythonSdkUtil.isStdLib(vFile, sdk) -> ModuleSourceType.STD_LIB + PySkeletonUtil.isStdLib(vFile, sdk) -> ModuleSourceType.STD_LIB ModuleUtilCore.findModuleForFile(vFile, baseElement.project) == null -> ModuleSourceType.EXTERNAL_LIB else -> ModuleSourceType.LOCAL_LIB } diff --git a/python/interpreters/src/impl/InterpreterServiceImpl.kt b/python/interpreters/src/impl/InterpreterServiceImpl.kt index 3a34398eb6f6..7489894dfbe1 100644 --- a/python/interpreters/src/impl/InterpreterServiceImpl.kt +++ b/python/interpreters/src/impl/InterpreterServiceImpl.kt @@ -17,7 +17,8 @@ import com.jetbrains.python.Result import com.jetbrains.python.errorProcessing.MessageError 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.legacy.PythonSdkUtil.isPythonSdk import com.jetbrains.python.sdk.flavors.PyFlavorData import com.jetbrains.python.sdk.getOrCreateAdditionalData import java.nio.file.InvalidPathException @@ -28,25 +29,21 @@ internal object InterpreterServiceImpl : InterpreterService { private val logger = fileLogger() override suspend fun getInterpreters(projectDir: Path): List { - val sdkAndDatas = PythonSdkUtil.getAllSdks() - .map { Pair(it.getOrCreateAdditionalData(), it) } - .filter { (data, _) -> sdkApplicableToThePath(data, projectDir) } + val interpreters = PythonSdkUtil.getAllSdks().mapNotNull { pythonSdk -> + val data = pythonSdk.getOrCreateAdditionalData() + if (!sdkApplicableToThePath(data, projectDir)) return@mapNotNull null - - val result = mutableListOf() - for ((additionalData, sdk) in sdkAndDatas) { - val interpreter = findInterpreter(additionalData, sdk) - result.add(interpreter) + findInterpreter(data, pythonSdk) } - return result + + return interpreters } override suspend fun getForModule(module: Module): Interpreter? { - val sdk = ModuleRootManager.getInstance(module).sdk ?: return null - if (sdk.sdkAdditionalData !is PythonSdkAdditionalData) { - return null - } - return findInterpreter(sdk.getOrCreateAdditionalData(), sdk) + val pythonSdk = ModuleRootManager.getInstance(module).sdk?.takeIf { isPythonSdk(it) } ?: return null + val data = pythonSdk.getOrCreateAdditionalData() + + return findInterpreter(data, pythonSdk) } private suspend fun findInterpreter( diff --git a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesAction.java b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesAction.java index fa21adeeeb5b..2d5dad7892d0 100644 --- a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesAction.java +++ b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesAction.java @@ -7,7 +7,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; 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 org.jetbrains.annotations.NotNull; diff --git a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesDialog.java b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesDialog.java index 8f06ff96c6e6..c61530f95cd7 100644 --- a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesDialog.java +++ b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/packaging/PyManagePackagesDialog.java @@ -10,13 +10,13 @@ import com.intellij.ui.scale.JBUIScale; import com.intellij.util.containers.ContainerUtil; import com.intellij.webcore.packaging.PackagesNotificationPanel; import com.jetbrains.python.PyBundle; +import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import com.jetbrains.python.sdk.impl.PySdkBundle; import com.jetbrains.python.packaging.PyPackageManagers; import com.jetbrains.python.packaging.PyPackagesNotificationPanel; import com.jetbrains.python.packaging.ui.PyInstalledPackagesPanel; import com.jetbrains.python.sdk.PreferredSdkComparator; import com.jetbrains.python.sdk.PySdkListCellRenderer; -import com.jetbrains.python.sdk.PythonSdkUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginCommonOptionsForm.java b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginCommonOptionsForm.java index 5acfe85e9b71..cb2b7c4e41a0 100644 --- a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginCommonOptionsForm.java +++ b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginCommonOptionsForm.java @@ -16,7 +16,7 @@ import com.jetbrains.python.PyBundle; import com.jetbrains.python.run.AbstractPyCommonOptionsForm; import com.jetbrains.python.run.PyCommonOptionsFormData; import com.jetbrains.python.sdk.PreferredSdkComparator; -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/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginSdkFragment.kt b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginSdkFragment.kt index 6c789a2391a2..992945aea10f 100644 --- a/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginSdkFragment.kt +++ b/python/pluginCore/impl/src/com/intellij/python/community/plugin/impl/run/PyPluginSdkFragment.kt @@ -13,7 +13,7 @@ import com.jetbrains.python.PyBundle import com.jetbrains.python.run.AbstractPythonRunConfiguration import com.jetbrains.python.run.configuration.PyInterpreterModeNotifier import com.jetbrains.python.run.configuration.PySdkComboBox -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import java.awt.GridBagConstraints import java.awt.GridBagLayout import java.awt.event.ItemEvent diff --git a/python/pluginJava/src/com/intellij/python/community/plugin/java/inspections/PythonPluginCommandLineInspectionProjectConfigurator.java b/python/pluginJava/src/com/intellij/python/community/plugin/java/inspections/PythonPluginCommandLineInspectionProjectConfigurator.java index e10949a6c776..41a250860a2b 100644 --- a/python/pluginJava/src/com/intellij/python/community/plugin/java/inspections/PythonPluginCommandLineInspectionProjectConfigurator.java +++ b/python/pluginJava/src/com/intellij/python/community/plugin/java/inspections/PythonPluginCommandLineInspectionProjectConfigurator.java @@ -19,7 +19,7 @@ import com.intellij.python.community.plugin.java.facet.JavaPythonFacet; import com.intellij.python.community.plugin.java.facet.JavaPythonFacetType; import com.jetbrains.python.sdk.PyDetectedSdk; import com.jetbrains.python.sdk.PySdkExtKt; -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/pluginResources/intellij.python.community.impl.xml b/python/pluginResources/intellij.python.community.impl.xml index 28152f16a4c3..0c8679c926ef 100644 --- a/python/pluginResources/intellij.python.community.impl.xml +++ b/python/pluginResources/intellij.python.community.impl.xml @@ -691,7 +691,6 @@ - + \ No newline at end of file diff --git a/python/python-psi-impl/resources/intellij.python.psi.impl.xml b/python/python-psi-impl/resources/intellij.python.psi.impl.xml index 29939da264dc..46f60d1f448f 100644 --- a/python/python-psi-impl/resources/intellij.python.psi.impl.xml +++ b/python/python-psi-impl/resources/intellij.python.psi.impl.xml @@ -1,6 +1,7 @@ + diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyCompletionUtils.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyCompletionUtils.kt index d019205eb8b6..5afabb72a783 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyCompletionUtils.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyCompletionUtils.kt @@ -24,8 +24,9 @@ import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyFunction import com.jetbrains.python.psi.resolve.QualifiedNameFinder import com.jetbrains.python.psi.types.TypeEvalContext -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.psi.icons.PythonPsiApiIcons +import com.jetbrains.python.sdk.skeleton.PySkeletonUtil import one.util.streamex.StreamEx /** @@ -157,7 +158,7 @@ fun computeCompletionWeight(element: PsiElement, elementName: String?, path: Qua if (vFile != null) { weight -= when { - PythonSdkUtil.isStdLib(vFile, sdk) -> LOCATION + PySkeletonUtil.isStdLib(vFile, sdk) -> LOCATION ModuleUtilCore.findModuleForFile(vFile, element.project) == null -> LOCATION * 2 else -> 0 } diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index 769af313ceea..521ec7480323 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -31,7 +31,8 @@ import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.QualifiedNameFinder; 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.PySkeletonUtil; import one.util.streamex.StreamEx; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -380,7 +381,7 @@ public final class AddImportHelper { final Module module = ModuleUtilCore.findModuleForPsiElement(importLocation); final Sdk pythonSdk = module != null ? PythonSdkUtil.findPythonSdk(module) : projectRootManager.getProjectSdk(); - if (PythonSdkUtil.isStdLib(vFile, pythonSdk)) { + if (PySkeletonUtil.isStdLib(vFile, pythonSdk)) { return new ImportPriorityChoice(ImportPriority.BUILTIN, vFile + " is either in lib but not under site-packages," + " or belongs to the root of skeletons," + " or is a .pyi stub definition for stdlib module"); diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/PythonImportUtils.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/PythonImportUtils.java index 8f48aa936d1b..e899be089096 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/PythonImportUtils.java +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/imports/PythonImportUtils.java @@ -10,7 +10,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import com.jetbrains.python.psi.*; -import com.jetbrains.python.sdk.PythonSdkUtil; +import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import org.jetbrains.annotations.Nullable; public final class PythonImportUtils { diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibCanonicalPathProvider.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibCanonicalPathProvider.kt index 0f1ab47c589b..688ea92468ec 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibCanonicalPathProvider.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibCanonicalPathProvider.kt @@ -19,7 +19,8 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiUtilCore import com.intellij.psi.util.QualifiedName import com.jetbrains.python.psi.resolve.PyCanonicalPathProvider -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil +import com.jetbrains.python.sdk.skeleton.PySkeletonUtil class PyStdlibCanonicalPathProvider : PyCanonicalPathProvider { @@ -27,7 +28,7 @@ class PyStdlibCanonicalPathProvider : PyCanonicalPathProvider { val virtualFile = PsiUtilCore.getVirtualFile(symbol) if (virtualFile != null && foothold != null) { val canonicalPath = restoreStdlibCanonicalPath(qName) - if (canonicalPath != null && PythonSdkUtil.isStdLib(virtualFile, PythonSdkUtil.findPythonSdk(foothold))) { + if (canonicalPath != null && PySkeletonUtil.isStdLib(virtualFile, PythonSdkUtil.findPythonSdk(foothold))) { return canonicalPath } } diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyNoneFunctionAssignmentInspection.java b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyNoneFunctionAssignmentInspection.java index 2c9a9d2a5bf7..d68bb3d40395 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyNoneFunctionAssignmentInspection.java +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyNoneFunctionAssignmentInspection.java @@ -12,7 +12,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.search.PyOverridingMethodsSearch; 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 java.util.HashMap; diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeHintsInspection.kt b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeHintsInspection.kt index 6698bb2ec727..97ba63a59935 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeHintsInspection.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeHintsInspection.kt @@ -48,7 +48,7 @@ import com.jetbrains.python.psi.resolve.PyResolveContext import com.jetbrains.python.psi.resolve.PyResolveUtil import com.jetbrains.python.psi.types.* import com.jetbrains.python.psi.types.PyTypeVarType.Variance -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil class PyTypeHintsInspection : PyInspection() { diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt index 935b7d780465..f6edeccc1d80 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyBuiltinCache.kt @@ -35,7 +35,7 @@ import com.jetbrains.python.psi.resolve.PythonSdkPathCache import com.jetbrains.python.psi.resolve.fromSdk import com.jetbrains.python.psi.resolve.resolveQualifiedName import com.jetbrains.python.psi.types.* -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil import org.jetbrains.annotations.NonNls /** diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java index 9344b12e6537..2215d2a8c6aa 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java @@ -35,7 +35,7 @@ import com.jetbrains.python.psi.stubs.PyClassStub; import com.jetbrains.python.psi.stubs.PyFunctionStub; import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; import com.jetbrains.python.psi.types.*; -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-psi-impl/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java index 4f3ec6f4d88a..6e7c911eef01 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java @@ -37,7 +37,7 @@ import com.jetbrains.python.module.PyModuleService; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.resolve.PythonSdkPathCache; -import com.jetbrains.python.sdk.PythonSdkUtil; +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/python-psi-impl/src/com/jetbrains/python/psi/resolve/PyResolveImportUtil.kt b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PyResolveImportUtil.kt index e8274a309205..c0df5b8c065c 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PyResolveImportUtil.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PyResolveImportUtil.kt @@ -34,7 +34,7 @@ import com.jetbrains.python.psi.impl.PyBuiltinCache import com.jetbrains.python.psi.impl.PyImportResolver 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 java.util.* /** diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PythonModulePathCache.java b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PythonModulePathCache.java index 5a314be6c812..5f19dfc007de 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PythonModulePathCache.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/PythonModulePathCache.java @@ -15,7 +15,7 @@ import com.intellij.platform.workspace.storage.VersionedStorageChange; import com.intellij.util.messages.MessageBusConnection; import com.intellij.workspaceModel.ide.impl.legacyBridge.module.ModuleEntityUtils; import com.jetbrains.python.packaging.PyPackageManager; -import com.jetbrains.python.sdk.PythonSdkUtil; +import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import org.jetbrains.annotations.NotNull; import java.util.List; diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java index f91c9d39e21b..7c61ba7a71e5 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java @@ -24,7 +24,7 @@ import com.jetbrains.python.codeInsight.typing.PyStubPackages; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyPsiUtils; -import com.jetbrains.python.sdk.PythonSdkUtil; +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/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchScopeBuilder.java b/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchScopeBuilder.java index 305970cce1df..76df114b8c0a 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchScopeBuilder.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchScopeBuilder.java @@ -13,7 +13,7 @@ import com.intellij.psi.util.QualifiedName; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.resolve.QualifiedNameFinder; -import com.jetbrains.python.sdk.PythonSdkUtil; +import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import one.util.streamex.StreamEx; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchUtilBase.java b/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchUtilBase.java index ca8d19e15559..035c6c5577b1 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchUtilBase.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/search/PySearchUtilBase.java @@ -15,7 +15,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.ProjectScope; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyNames; -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-psi-impl/src/com/jetbrains/python/psi/types/PyTypeChecker.java b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTypeChecker.java index 750370839c70..a6d6ecfb3a58 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTypeChecker.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/types/PyTypeChecker.java @@ -23,7 +23,7 @@ import com.jetbrains.python.psi.types.PyRecursiveTypeVisitor.PyTypeTraverser; import com.jetbrains.python.psi.types.PyRecursiveTypeVisitor.Traversal; import com.jetbrains.python.psi.types.PyTypeParameterMapping.Option; import com.jetbrains.python.pyi.PyiFile; -import com.jetbrains.python.sdk.PythonSdkUtil; +import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import one.util.streamex.EntryStream; import one.util.streamex.IntStreamEx; import one.util.streamex.StreamEx; diff --git a/python/python-psi-impl/src/com/jetbrains/python/refactoring/inline/PyInlineFunctionHandler.kt b/python/python-psi-impl/src/com/jetbrains/python/refactoring/inline/PyInlineFunctionHandler.kt index ec8cfda95891..e4fd076962ce 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/refactoring/inline/PyInlineFunctionHandler.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/refactoring/inline/PyInlineFunctionHandler.kt @@ -27,7 +27,7 @@ import com.jetbrains.python.psi.types.TypeEvalContext import com.jetbrains.python.pyi.PyiFile import com.jetbrains.python.pyi.PyiUtil import com.jetbrains.python.refactoring.PyRefactoringUiService -import com.jetbrains.python.sdk.PythonSdkUtil +import com.jetbrains.python.sdk.legacy.PythonSdkUtil /** * @author Aleksei.Kniazev diff --git a/python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkValidator.kt b/python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkValidator.kt deleted file mode 100644 index c3d5b4fc357a..000000000000 --- a/python/python-psi-impl/src/com/jetbrains/python/sdk/PyRemoteSdkValidator.kt +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.jetbrains.python.sdk - -import com.intellij.openapi.extensions.ExtensionPointName -import com.intellij.openapi.projectRoots.Sdk - -/** - * this extension point is temporary and it's not meant for public use! - */ -interface PyRemoteSdkValidator { - companion object { - private val EP = ExtensionPointName.create("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 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 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