diff --git a/.idea/modules.xml b/.idea/modules.xml
index 9b8eb2fc5061..6dd43a770cfb 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1369,8 +1369,10 @@
-
-
+
+
+
+
diff --git a/build/bazel-generated-file-list.txt b/build/bazel-generated-file-list.txt
index 46efbf3627a3..914a70f4bf74 100644
--- a/build/bazel-generated-file-list.txt
+++ b/build/bazel-generated-file-list.txt
@@ -1417,7 +1417,6 @@ python/ide/impl
python/ide/impl/intellij.pycharm.community.ide.impl.promotion
python/ide/implTraining/intellij.pycharm.community.ide.implTraining
python/impl.helperLocator
-python/impl.uv
python/installer
python/intellij.python.community.communityOnly
python/intellij.python.ml.features
@@ -1431,7 +1430,6 @@ python/pluginCore/impl
python/pluginJava
python/pluginMinor
python/pluginMinorRider
-python/poetry
python/python-ast
python/python-copyright
python/python-core-impl
@@ -1442,6 +1440,8 @@ python/python-grazie
python/python-hatch
python/python-markdown
python/python-parser
+python/python-poetry/backend
+python/python-poetry/common
python/python-process-output
python/python-process-output/impl
python/python-psi-api
@@ -1456,6 +1456,8 @@ python/python-sdk-ui
python/python-syntax
python/python-syntax-core
python/python-terminal
+python/python-uv/backend
+python/python-uv/common
python/python-venv
python/services/internal-impl
python/services/shared
diff --git a/python/BUILD.bazel b/python/BUILD.bazel
index 82bbedc49f0e..6e631c19ca27 100644
--- a/python/BUILD.bazel
+++ b/python/BUILD.bazel
@@ -330,7 +330,6 @@ jvm_library(
"//platform/platform-impl/remote",
"//platform/platform-impl/ui",
"//libraries/jackson/module-kotlin:libraries-jackson-module-kotlin",
- "//python/poetry",
"//python/pipenv",
"//python/installer",
"//platform/eel",
@@ -353,9 +352,11 @@ jvm_library(
"//python/python-exec-service/execService.python",
"//python/interpreters",
"//python/python-sdk-configurator/common",
+ "//python/python-poetry/common",
+ "//python/python-uv/common",
+ "//python/common",
"//python/python-process-output:processOutput",
"//platform/xdebugger-impl/shared",
- "//python/impl.uv",
],
exports = [
"//python/openapi:community",
diff --git a/python/aliasProvider/BUILD.bazel b/python/aliasProvider/BUILD.bazel
index 6dc9a7d92e86..5c086e3de547 100644
--- a/python/aliasProvider/BUILD.bazel
+++ b/python/aliasProvider/BUILD.bazel
@@ -22,7 +22,6 @@ jvm_library(
"//python/python-sdk:sdk",
"//python/python-sdk-ui:sdk-ui",
"//python/python-pyproject:pyproject",
- "//python/poetry",
"//python/python-core-impl:community-core-impl",
"//python/impl.helperLocator:community-helpersLocator",
"//python/openapi:community",
diff --git a/python/aliasProvider/intellij.python.community.aliasProvider.iml b/python/aliasProvider/intellij.python.community.aliasProvider.iml
index 59024b083308..1409ec44dcb6 100644
--- a/python/aliasProvider/intellij.python.community.aliasProvider.iml
+++ b/python/aliasProvider/intellij.python.community.aliasProvider.iml
@@ -16,7 +16,6 @@
-
diff --git a/python/aliasProvider/resources/intellij.python.community.aliasProvider.xml b/python/aliasProvider/resources/intellij.python.community.aliasProvider.xml
index 3ac13ef996c1..a0056a189ef7 100644
--- a/python/aliasProvider/resources/intellij.python.community.aliasProvider.xml
+++ b/python/aliasProvider/resources/intellij.python.community.aliasProvider.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/python/common/resources/intellij.python.common.xml b/python/common/resources/intellij.python.common.xml
index aa52f3dbdcd0..5b1fe57efc0e 100644
--- a/python/common/resources/intellij.python.common.xml
+++ b/python/common/resources/intellij.python.common.xml
@@ -1,2 +1,5 @@
+
+
+
diff --git a/python/openapi/src/com/jetbrains/python/ToolId.kt b/python/common/src/tools/ToolId.kt
similarity index 88%
rename from python/openapi/src/com/jetbrains/python/ToolId.kt
rename to python/common/src/tools/ToolId.kt
index 87d1ca565888..3ecfca15a69c 100644
--- a/python/openapi/src/com/jetbrains/python/ToolId.kt
+++ b/python/common/src/tools/ToolId.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.jetbrains.python
+package com.intellij.python.common.tools
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.NonNls
diff --git a/python/common/src/tools/api.kt b/python/common/src/tools/api.kt
new file mode 100644
index 000000000000..13fb14a4007a
--- /dev/null
+++ b/python/common/src/tools/api.kt
@@ -0,0 +1,10 @@
+package com.intellij.python.common.tools
+
+import com.intellij.python.common.tools.spi.ToolIdToIconMapper
+import javax.swing.Icon
+
+
+/**
+ * Get icon for certain tool id
+ */
+fun getIcon(id: ToolId): Icon? = ToolIdToIconMapper.EP.extensionList.firstOrNull { it.id == id }?.icon
\ No newline at end of file
diff --git a/python/impl.uv/src/package-info.java b/python/common/src/tools/package-info.java
similarity index 79%
rename from python/impl.uv/src/package-info.java
rename to python/common/src/tools/package-info.java
index e0aec686c1af..26db1b5af020 100644
--- a/python/impl.uv/src/package-info.java
+++ b/python/common/src/tools/package-info.java
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
@ApiStatus.Internal
-package com.intellij.python.community.impl.uv;
+package com.intellij.python.common.tools;
import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/common/src/tools/spi/ToolIdToIconMapper.kt b/python/common/src/tools/spi/ToolIdToIconMapper.kt
new file mode 100644
index 000000000000..819f494eea79
--- /dev/null
+++ b/python/common/src/tools/spi/ToolIdToIconMapper.kt
@@ -0,0 +1,15 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.python.common.tools.spi
+
+import com.intellij.openapi.extensions.ExtensionPointName
+import com.intellij.python.common.tools.ToolId
+import javax.swing.Icon
+
+interface ToolIdToIconMapper {
+ val id: ToolId
+ val icon: Icon
+
+ companion object {
+ internal val EP = ExtensionPointName.create("com.intellij.python.common.toolToIconMapper")
+ }
+}
\ No newline at end of file
diff --git a/python/poetry/src/com/intellij/python/community/impl/poetry/package-info.java b/python/common/src/tools/spi/package-info.java
similarity index 78%
rename from python/poetry/src/com/intellij/python/community/impl/poetry/package-info.java
rename to python/common/src/tools/spi/package-info.java
index 1fa4a1f3d36b..8b5b19d508a1 100644
--- a/python/poetry/src/com/intellij/python/community/impl/poetry/package-info.java
+++ b/python/common/src/tools/spi/package-info.java
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
@ApiStatus.Internal
-package com.intellij.python.community.impl.poetry;
+package com.intellij.python.common.tools.spi;
import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/common/src/welcomeScreen/package-info.java b/python/common/src/welcomeScreen/package-info.java
new file mode 100644
index 000000000000..047c8d29e066
--- /dev/null
+++ b/python/common/src/welcomeScreen/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.common.welcomeScreen;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/ide/impl/BUILD.bazel b/python/ide/impl/BUILD.bazel
index 92548c368b5b..cff22a94c38d 100644
--- a/python/ide/impl/BUILD.bazel
+++ b/python/ide/impl/BUILD.bazel
@@ -56,7 +56,6 @@ jvm_library(
"//platform/eel",
"//platform/eel-provider",
"//python/services/shared",
- "//python/poetry",
"//python/pipenv",
"//python/python-venv:community-impl-venv",
"@lib//:jetbrains-annotations",
@@ -69,8 +68,9 @@ jvm_library(
"//python/python-exec-service:community-execService",
"//python/python-sdk-configurator/common",
"//python/python-sdk-ui:sdk-ui",
+ "//python/python-poetry/common",
+ "//python/python-uv/common",
"//python/python-exec-service/execService.python",
- "//python/impl.uv",
],
runtime_deps = ["//python/python-features-trainer:featuresTrainer"],
plugins = ["@lib//:compose-plugin"]
@@ -127,7 +127,6 @@ jvm_library(
"//platform/eel-provider",
"//python/services/shared",
"//python/services/shared:shared_test_lib",
- "//python/poetry",
"//python/pipenv",
"//python/python-venv:community-impl-venv",
"//python/python-venv:community-impl-venv_test_lib",
@@ -146,9 +145,10 @@ jvm_library(
"//python/python-exec-service:community-execService_test_lib",
"//python/python-sdk-configurator/common",
"//python/python-sdk-ui:sdk-ui",
+ "//python/python-poetry/common",
+ "//python/python-uv/common",
"//python/python-exec-service/execService.python",
"//python/python-exec-service/execService.python:execService.python_test_lib",
- "//python/impl.uv",
],
plugins = ["@lib//:compose-plugin"]
)
diff --git a/python/ide/impl/intellij.pycharm.community.ide.impl.iml b/python/ide/impl/intellij.pycharm.community.ide.impl.iml
index a5794f5bcb96..c49233be7614 100644
--- a/python/ide/impl/intellij.pycharm.community.ide.impl.iml
+++ b/python/ide/impl/intellij.pycharm.community.ide.impl.iml
@@ -68,7 +68,6 @@
-
@@ -83,7 +82,8 @@
+
+
-
\ No newline at end of file
diff --git a/python/ide/impl/resources/intellij.pycharm.community.ide.impl.xml b/python/ide/impl/resources/intellij.pycharm.community.ide.impl.xml
index 3525e2a0d7c1..6d02fef7410a 100644
--- a/python/ide/impl/resources/intellij.pycharm.community.ide.impl.xml
+++ b/python/ide/impl/resources/intellij.pycharm.community.ide.impl.xml
@@ -8,6 +8,8 @@
+
+
diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/conda/PyEnvironmentYmlSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/conda/PyEnvironmentYmlSdkConfiguration.kt
index 2a7b079219f4..28286144b039 100644
--- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/conda/PyEnvironmentYmlSdkConfiguration.kt
+++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/conda/PyEnvironmentYmlSdkConfiguration.kt
@@ -19,13 +19,11 @@ import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationC
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.Source
import com.intellij.pycharm.community.ide.impl.configuration.ui.PyAddNewCondaEnvFromFilePanel
import com.intellij.pycharm.community.ide.impl.findEnvOrNull
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.community.execService.BinOnEel
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.intellij.util.FileName
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.python.PyBundle
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.configuration.PyConfigurableInterpreterList
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrNull
@@ -68,7 +66,7 @@ class PyEnvironmentYmlSdkConfiguration : PyProjectSdkConfigurationExtension {
override val toolId: ToolId = ToolId("Conda")
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
- { checkManageableEnv(module, it) }
+ { checkManageableEnv(module, it) }
) { envExists ->
{ needsConfirmation -> createAndAddSdk(module, if (needsConfirmation) Source.CONFIGURATOR else Source.INSPECTION, envExists) }
}
diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt
index 6a19428a75a4..6e812f5acc98 100644
--- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt
+++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PyHatchSdkConfiguration.kt
@@ -6,14 +6,12 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.platform.util.progress.reportRawProgress
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.hatch.HatchVirtualEnvironment
import com.intellij.python.hatch.PythonVirtualEnvironment
import com.intellij.python.hatch.cli.HatchEnvironment
import com.intellij.python.hatch.getHatchService
import com.intellij.python.hatch.impl.HATCH_TOOL_ID
-import com.intellij.python.hatch.impl.HATCH_UI_INFO
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrLogException
import com.jetbrains.python.hatch.sdk.createSdk
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 97ade8482067..b67b306e11d3 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
@@ -17,15 +17,13 @@ import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationC
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.PipEnvResult
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.Source
import com.intellij.pycharm.community.ide.impl.findEnvOrNull
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.community.execService.ZeroCodeStdoutParserTransformer
import com.intellij.python.community.impl.pipenv.pipenvPath
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.intellij.ui.IdeBorderFactory
import com.intellij.ui.components.JBLabel
import com.intellij.util.ui.JBUI
import com.jetbrains.python.PyBundle
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrLogException
import com.jetbrains.python.sdk.PythonSdkType
@@ -57,7 +55,7 @@ class PyPipfileSdkConfiguration : PyProjectSdkConfigurationExtension {
override val toolId: ToolId = ToolId("pipenv")
override suspend fun checkEnvironmentAndPrepareSdkCreator(module: Module): CreateSdkInfo? = prepareSdkCreator(
- { checkManageableEnv(module, it) }
+ { checkManageableEnv(module, it) }
) { envExists ->
{ needsConfirmation -> createAndAddSdk(module, if (needsConfirmation) Source.CONFIGURATOR else Source.INSPECTION, envExists) }
}
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 41a0dc8e0313..2fbdee838f0d 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
@@ -12,13 +12,10 @@ 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.pycharm.community.ide.impl.findEnvOrNull
-import com.intellij.python.community.impl.poetry.impl.POETRY_TOOL_ID
-import com.intellij.python.community.impl.poetry.impl.POETRY_UI_INFO
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.community.impl.poetry.common.POETRY_TOOL_ID
import com.intellij.python.pyproject.PyProjectToml
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.jetbrains.python.PyBundle
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.poetry.findPoetryLock
import com.jetbrains.python.poetry.getPyProjectTomlForPoetry
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 dbb0bdfb2743..3070e7d5c73e 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
@@ -21,10 +21,10 @@ import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationC
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.Source
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.VirtualEnvResult
import com.intellij.pycharm.community.ide.impl.configuration.ui.PyAddNewVirtualEnvFromFilePanel
+import com.intellij.python.common.tools.ToolId
import com.intellij.ui.IdeBorderFactory
import com.intellij.ui.components.JBLabel
import com.intellij.util.ui.JBUI
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.packaging.PyPackageUtil
import com.jetbrains.python.packaging.management.PythonPackageManager
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 61e983d839b3..33a6b503b839 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
@@ -10,14 +10,11 @@ import com.intellij.openapi.util.io.toNioPathOrNull
import com.intellij.openapi.vfs.readText
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
import com.intellij.pycharm.community.ide.impl.findEnvOrNull
-import com.intellij.python.community.impl.uv.UV_TOOL_ID
-import com.intellij.python.community.impl.uv.UV_UI_INFO
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.community.impl.uv.common.UV_TOOL_ID
import com.intellij.python.pyproject.PyProjectToml
import com.intellij.python.pyproject.model.api.SuggestedSdk
import com.intellij.python.pyproject.model.api.suggestSdk
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.getOrLogException
import com.jetbrains.python.onSuccess
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 48a3805988ab..d6bc5b791afa 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
@@ -7,9 +7,8 @@ import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.platform.ide.progress.withBackgroundProgress
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
import com.intellij.pycharm.community.ide.impl.findEnvOrNull
+import com.intellij.python.common.tools.ToolId
import com.jetbrains.python.PyBundle
-import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.errorProcessing.MessageError
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.*
diff --git a/python/intellij.python.community.impl.iml b/python/intellij.python.community.impl.iml
index 1b389d127b30..0c6d4cae69a1 100644
--- a/python/intellij.python.community.impl.iml
+++ b/python/intellij.python.community.impl.iml
@@ -167,7 +167,6 @@
-
@@ -190,8 +189,10 @@
+
+
+
-
\ No newline at end of file
diff --git a/python/junit5Tests-framework/BUILD.bazel b/python/junit5Tests-framework/BUILD.bazel
index 9d7912cc72df..07b22fd1907a 100644
--- a/python/junit5Tests-framework/BUILD.bazel
+++ b/python/junit5Tests-framework/BUILD.bazel
@@ -55,11 +55,11 @@ jvm_library(
"//platform/util/coroutines",
"//python/openapi:community",
"//python/openapi:community_test_lib",
- "//python/poetry",
"//python/pipenv",
"//python/setup-test-environment:community-testFramework-testEnv",
"//python/python-sdk:sdk",
"//python/python-sdk:sdk_test_lib",
+ "//python/python-poetry/common",
],
exports = [
"//libraries/system-stubs-jupiter",
diff --git a/python/junit5Tests-framework/intellij.python.community.junit5Tests.framework.iml b/python/junit5Tests-framework/intellij.python.community.junit5Tests.framework.iml
index 482a2b2407cf..7e07f5616fcc 100644
--- a/python/junit5Tests-framework/intellij.python.community.junit5Tests.framework.iml
+++ b/python/junit5Tests-framework/intellij.python.community.junit5Tests.framework.iml
@@ -38,10 +38,10 @@
-
+
\ No newline at end of file
diff --git a/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/env/impl/VanillaPythonEnvExtension.kt b/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/env/impl/VanillaPythonEnvExtension.kt
index 62490a9f8465..b363e584cb93 100644
--- a/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/env/impl/VanillaPythonEnvExtension.kt
+++ b/python/junit5Tests-framework/src/com/intellij/python/junit5Tests/framework/env/impl/VanillaPythonEnvExtension.kt
@@ -6,7 +6,7 @@ import com.intellij.execution.process.CapturingProcessHandler
import com.intellij.execution.process.ProcessNotCreatedException
import com.intellij.ide.util.PropertiesComponent
import com.intellij.python.community.impl.pipenv.pipenvPath
-import com.intellij.python.community.impl.poetry.poetryPath
+import com.intellij.python.community.impl.poetry.common.poetryPath
import com.intellij.python.community.testFramework.testEnv.PythonType
import com.intellij.python.community.testFramework.testEnv.TypeVanillaPython3
import com.intellij.python.junit5Tests.framework.env.PythonBinaryPath
diff --git a/python/junit5Tests-framework/testResources/intellij.python.community.junit5Tests.framework._test.xml b/python/junit5Tests-framework/testResources/intellij.python.community.junit5Tests.framework._test.xml
index cc49c32a842d..734212fbc3b1 100644
--- a/python/junit5Tests-framework/testResources/intellij.python.community.junit5Tests.framework._test.xml
+++ b/python/junit5Tests-framework/testResources/intellij.python.community.junit5Tests.framework._test.xml
@@ -7,5 +7,6 @@
+
\ No newline at end of file
diff --git a/python/pluginCore/plugin-content.yaml b/python/pluginCore/plugin-content.yaml
index bc88b7d6028f..13b335244bd7 100644
--- a/python/pluginCore/plugin-content.yaml
+++ b/python/pluginCore/plugin-content.yaml
@@ -63,12 +63,18 @@
- name: lib/modules/intellij.python.community.impl.pipenv.jar
contentModules:
- name: intellij.python.community.impl.pipenv
-- name: lib/modules/intellij.python.community.impl.poetry.jar
+- name: lib/modules/intellij.python.community.impl.poetry.backend.jar
contentModules:
- - name: intellij.python.community.impl.poetry
-- name: lib/modules/intellij.python.community.impl.uv.jar
+ - name: intellij.python.community.impl.poetry.backend
+- name: lib/modules/intellij.python.community.impl.poetry.common.jar
contentModules:
- - name: intellij.python.community.impl.uv
+ - name: intellij.python.community.impl.poetry.common
+- name: lib/modules/intellij.python.community.impl.uv.backend.jar
+ contentModules:
+ - name: intellij.python.community.impl.uv.backend
+- name: lib/modules/intellij.python.community.impl.uv.common.jar
+ contentModules:
+ - name: intellij.python.community.impl.uv.common
- name: lib/modules/intellij.python.community.impl.venv.jar
contentModules:
- name: intellij.python.community.impl.venv
diff --git a/python/pluginCore/resources/META-INF/plugin.xml b/python/pluginCore/resources/META-INF/plugin.xml
index b240da25bfef..012698bf5ceb 100644
--- a/python/pluginCore/resources/META-INF/plugin.xml
+++ b/python/pluginCore/resources/META-INF/plugin.xml
@@ -25,6 +25,7 @@ The Python plug-in provides smart editing for Python scripts. The feature set of
+
@@ -37,8 +38,10 @@ The Python plug-in provides smart editing for Python scripts. The feature set of
-
-
+
+
+
+
@@ -72,7 +75,6 @@ The Python plug-in provides smart editing for Python scripts. The feature set of
-
diff --git a/python/pluginResources/intellij.python.community.impl.xml b/python/pluginResources/intellij.python.community.impl.xml
index bb676ec0059d..ff6a092a3b29 100644
--- a/python/pluginResources/intellij.python.community.impl.xml
+++ b/python/pluginResources/intellij.python.community.impl.xml
@@ -4,13 +4,14 @@
+
-
-
+
+
diff --git a/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java b/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java
deleted file mode 100644
index 2c5b27d37ea2..000000000000
--- a/python/poetry/src/com/intellij/python/community/impl/poetry/impl/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-@Internal
-package com.intellij.python.community.impl.poetry.impl;
-
-import static org.jetbrains.annotations.ApiStatus.Internal;
diff --git a/python/python-hatch/BUILD.bazel b/python/python-hatch/BUILD.bazel
index 09214fc27989..14d29f700737 100644
--- a/python/python-hatch/BUILD.bazel
+++ b/python/python-hatch/BUILD.bazel
@@ -37,6 +37,7 @@ jvm_library(
"//libraries/kotlinx/serialization/core",
"@lib//:io-github-z4kn4fein-semver-jvm-provided",
"//python/python-sdk-ui:sdk-ui",
+ "//python/common",
"//python/python-exec-service/execService.python",
]
)
diff --git a/python/python-hatch/intellij.python.hatch.iml b/python/python-hatch/intellij.python.hatch.iml
index 24c9cb057a78..7f10aba2f5e1 100644
--- a/python/python-hatch/intellij.python.hatch.iml
+++ b/python/python-hatch/intellij.python.hatch.iml
@@ -46,6 +46,7 @@
+
\ No newline at end of file
diff --git a/python/python-hatch/resources/intellij.python.hatch.xml b/python/python-hatch/resources/intellij.python.hatch.xml
index 9ccc2b5e9855..626ec13dc08f 100644
--- a/python/python-hatch/resources/intellij.python.hatch.xml
+++ b/python/python-hatch/resources/intellij.python.hatch.xml
@@ -5,6 +5,7 @@
+
@@ -16,4 +17,7 @@
+
+
+
\ No newline at end of file
diff --git a/python/python-hatch/src/com/intellij/python/hatch/impl/HatchIdMapper.kt b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchIdMapper.kt
new file mode 100644
index 000000000000..70a3693e935f
--- /dev/null
+++ b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchIdMapper.kt
@@ -0,0 +1,11 @@
+package com.intellij.python.hatch.impl
+
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.common.tools.spi.ToolIdToIconMapper
+import com.intellij.python.hatch.icons.PythonHatchIcons
+import javax.swing.Icon
+
+internal class HatchIdMapper : ToolIdToIconMapper {
+ override val id: ToolId = HATCH_TOOL_ID
+ override val icon: Icon = PythonHatchIcons.Logo
+}
\ No newline at end of file
diff --git a/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt
index 2596679b7d6d..100cce412a4a 100644
--- a/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt
+++ b/python/python-hatch/src/com/intellij/python/hatch/impl/HatchTool.kt
@@ -2,13 +2,13 @@
package com.intellij.python.hatch.impl
import com.intellij.openapi.util.NlsSafe
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.hatch.icons.PythonHatchIcons
import com.intellij.python.pyproject.model.spi.ProjectName
import com.intellij.python.pyproject.model.spi.ProjectStructureInfo
import com.intellij.python.pyproject.model.spi.PyProjectTomlProject
import com.intellij.python.pyproject.model.spi.Tool
import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.venvReader.Directory
import org.apache.tuweni.toml.TomlTable
import org.jetbrains.annotations.ApiStatus
diff --git a/python/python-poetry/backend/BUILD.bazel b/python/python-poetry/backend/BUILD.bazel
new file mode 100644
index 000000000000..7dc7a5efae39
--- /dev/null
+++ b/python/python-poetry/backend/BUILD.bazel
@@ -0,0 +1,26 @@
+### auto-generated section `build intellij.python.community.impl.poetry.backend` start
+load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup")
+
+resourcegroup(
+ name = "backend_resources",
+ srcs = glob(["resources/**/*"]),
+ strip_prefix = "resources"
+)
+
+jvm_library(
+ name = "backend",
+ module_name = "intellij.python.community.impl.poetry.backend",
+ visibility = ["//visibility:public"],
+ srcs = glob(["src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True),
+ resources = [":backend_resources"],
+ deps = [
+ "@lib//:kotlin-stdlib",
+ "@lib//:jetbrains-annotations",
+ "//python/python-poetry/common",
+ "//python/openapi:community",
+ "//python/python-pyproject:pyproject",
+ "//platform/util/base/multiplatform",
+ "//python/common",
+ ]
+)
+### auto-generated section `build intellij.python.community.impl.poetry.backend` end
\ No newline at end of file
diff --git a/python/poetry/intellij.python.community.impl.poetry.iml b/python/python-poetry/backend/intellij.python.community.impl.poetry.backend.iml
similarity index 70%
rename from python/poetry/intellij.python.community.impl.poetry.iml
rename to python/python-poetry/backend/intellij.python.community.impl.poetry.backend.iml
index 8894fdc646fd..9d5391cf6748 100644
--- a/python/poetry/intellij.python.community.impl.poetry.iml
+++ b/python/python-poetry/backend/intellij.python.community.impl.poetry.backend.iml
@@ -5,18 +5,15 @@
-
-
-
+
-
-
+
\ No newline at end of file
diff --git a/python/poetry/resources/intellij.python.community.impl.poetry.xml b/python/python-poetry/backend/resources/intellij.python.community.impl.poetry.backend.xml
similarity index 68%
rename from python/poetry/resources/intellij.python.community.impl.poetry.xml
rename to python/python-poetry/backend/resources/intellij.python.community.impl.poetry.backend.xml
index 441b07296405..a342820e198f 100644
--- a/python/poetry/resources/intellij.python.community.impl.poetry.xml
+++ b/python/python-poetry/backend/resources/intellij.python.community.impl.poetry.backend.xml
@@ -4,8 +4,11 @@
+
+
+
-
+
\ No newline at end of file
diff --git a/python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt b/python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/PoetryTool.kt
similarity index 73%
rename from python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt
rename to python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/PoetryTool.kt
index 6f4c8ee5b1c1..39c40f912104 100644
--- a/python/poetry/src/com/intellij/python/community/impl/poetry/impl/PoetryTool.kt
+++ b/python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/PoetryTool.kt
@@ -1,22 +1,22 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.python.community.impl.poetry.impl
+package com.intellij.python.community.impl.poetry.backend
import com.intellij.openapi.util.NlsSafe
-import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.community.impl.poetry.common.POETRY_TOOL_ID
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
import com.intellij.python.pyproject.model.spi.ProjectName
import com.intellij.python.pyproject.model.spi.ProjectStructureInfo
import com.intellij.python.pyproject.model.spi.PyProjectTomlProject
import com.intellij.python.pyproject.model.spi.Tool
import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.venvReader.Directory
import org.apache.tuweni.toml.TomlTable
-import org.jetbrains.annotations.ApiStatus
-@ApiStatus.Internal
-val POETRY_TOOL_ID: ToolId = ToolId("poetry")
-val POETRY_UI_INFO: PyToolUIInfo = PyToolUIInfo("Poetry", PythonCommunityImplPoetryIcons.Poetry)
+
+private val POETRY_UI_INFO: PyToolUIInfo = PyToolUIInfo("Poetry", PythonCommunityImplPoetryCommonIcons.Poetry)
+
internal class PoetryTool : Tool {
override val id: ToolId = POETRY_TOOL_ID
diff --git a/python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/package-info.java b/python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/package-info.java
new file mode 100644
index 000000000000..16367eda812a
--- /dev/null
+++ b/python/python-poetry/backend/src/com/intellij/python/community/impl/poetry/backend/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.community.impl.poetry.backend;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/python-poetry/common/BUILD.bazel b/python/python-poetry/common/BUILD.bazel
new file mode 100644
index 000000000000..a25753e4a931
--- /dev/null
+++ b/python/python-poetry/common/BUILD.bazel
@@ -0,0 +1,24 @@
+### auto-generated section `build intellij.python.community.impl.poetry.common` start
+load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup")
+
+resourcegroup(
+ name = "common_resources",
+ srcs = glob(["resources/**/*"]),
+ strip_prefix = "resources"
+)
+
+jvm_library(
+ name = "common",
+ module_name = "intellij.python.community.impl.poetry.common",
+ visibility = ["//visibility:public"],
+ srcs = glob(["gen/**/*.kt", "gen/**/*.java", "src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True),
+ resources = [":common_resources"],
+ deps = [
+ "@lib//:kotlin-stdlib",
+ "@lib//:jetbrains-annotations",
+ "//platform/core-api:core",
+ "//platform/util",
+ "//python/common",
+ ]
+)
+### auto-generated section `build intellij.python.community.impl.poetry.common` end
\ No newline at end of file
diff --git a/python/poetry/gen/com/intellij/python/community/impl/poetry/icons/PythonCommunityImplPoetryIcons.java b/python/python-poetry/common/gen/com/intellij/python/community/impl/poetry/common/icons/PythonCommunityImplPoetryCommonIcons.java
similarity index 68%
rename from python/poetry/gen/com/intellij/python/community/impl/poetry/icons/PythonCommunityImplPoetryIcons.java
rename to python/python-poetry/common/gen/com/intellij/python/community/impl/poetry/common/icons/PythonCommunityImplPoetryCommonIcons.java
index 00be5ab8494a..9ec7267a7d29 100644
--- a/python/poetry/gen/com/intellij/python/community/impl/poetry/icons/PythonCommunityImplPoetryIcons.java
+++ b/python/python-poetry/common/gen/com/intellij/python/community/impl/poetry/common/icons/PythonCommunityImplPoetryCommonIcons.java
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.python.community.impl.poetry.icons;
+package com.intellij.python.community.impl.poetry.common.icons;
import com.intellij.ui.IconManager;
import org.jetbrains.annotations.NotNull;
@@ -11,9 +11,9 @@ import javax.swing.*;
* DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead
*/
@org.jetbrains.annotations.ApiStatus.Internal
-public final class PythonCommunityImplPoetryIcons {
+public final class PythonCommunityImplPoetryCommonIcons {
private static @NotNull Icon load(@NotNull String path, int cacheKey, int flags) {
- return IconManager.getInstance().loadRasterizedIcon(path, PythonCommunityImplPoetryIcons.class.getClassLoader(), cacheKey, flags);
+ return IconManager.getInstance().loadRasterizedIcon(path, PythonCommunityImplPoetryCommonIcons.class.getClassLoader(), cacheKey, flags);
}
- /** 16x16 */ public static final @NotNull Icon Poetry = load("icons/com/intellij/python/community/impl/poetry/expui/poetry.svg", -142471747, 0);
+ /** 16x16 */ public static final @NotNull Icon Poetry = load("icons/intellij/python/community/impl/poetry/common/expui/poetry.svg", -142471747, 0);
}
diff --git a/python/python-poetry/common/intellij.python.community.impl.poetry.common.iml b/python/python-poetry/common/intellij.python.community.impl.poetry.common.iml
new file mode 100644
index 000000000000..83de97187f08
--- /dev/null
+++ b/python/python-poetry/common/intellij.python.community.impl.poetry.common.iml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/poetry/resources/icons/com/intellij/python/community/impl/poetry/expui/poetry.svg b/python/python-poetry/common/resources/icons/intellij/python/community/impl/poetry/common/expui/poetry.svg
similarity index 100%
rename from python/poetry/resources/icons/com/intellij/python/community/impl/poetry/expui/poetry.svg
rename to python/python-poetry/common/resources/icons/intellij/python/community/impl/poetry/common/expui/poetry.svg
diff --git a/python/python-poetry/common/resources/intellij.python.community.impl.poetry.common.xml b/python/python-poetry/common/resources/intellij.python.community.impl.poetry.common.xml
new file mode 100644
index 000000000000..cd7211969b60
--- /dev/null
+++ b/python/python-poetry/common/resources/intellij.python.community.impl.poetry.common.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/python/python-poetry/common/src/impl/PoetryToolIdMapper.kt b/python/python-poetry/common/src/impl/PoetryToolIdMapper.kt
new file mode 100644
index 000000000000..220d19e32d77
--- /dev/null
+++ b/python/python-poetry/common/src/impl/PoetryToolIdMapper.kt
@@ -0,0 +1,13 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.python.community.impl.poetry.common.impl
+
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.common.tools.spi.ToolIdToIconMapper
+import com.intellij.python.community.impl.poetry.common.POETRY_TOOL_ID
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
+import javax.swing.Icon
+
+internal class PoetryToolIdMapper : ToolIdToIconMapper {
+ override val id: ToolId = POETRY_TOOL_ID
+ override val icon: Icon = PythonCommunityImplPoetryCommonIcons.Poetry
+}
\ No newline at end of file
diff --git a/python/python-poetry/common/src/impl/package-info.java b/python/python-poetry/common/src/impl/package-info.java
new file mode 100644
index 000000000000..8905e96fe205
--- /dev/null
+++ b/python/python-poetry/common/src/impl/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.community.impl.poetry.common.impl;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/python-poetry/common/src/package-info.java b/python/python-poetry/common/src/package-info.java
new file mode 100644
index 000000000000..bda133c6ebad
--- /dev/null
+++ b/python/python-poetry/common/src/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.community.impl.poetry.common;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/poetry/src/com/intellij/python/community/impl/poetry/path.kt b/python/python-poetry/common/src/poetryId.kt
similarity index 71%
rename from python/poetry/src/com/intellij/python/community/impl/poetry/path.kt
rename to python/python-poetry/common/src/poetryId.kt
index ee168e5684eb..9b5c8f28c860 100644
--- a/python/poetry/src/com/intellij/python/community/impl/poetry/path.kt
+++ b/python/python-poetry/common/src/poetryId.kt
@@ -1,10 +1,13 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.python.community.impl.poetry
+package com.intellij.python.community.impl.poetry.common
import com.intellij.ide.util.PropertiesComponent
+import com.intellij.python.common.tools.ToolId
+import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.SystemDependent
-private const val POETRY_PATH_SETTING: String = "PyCharm.Poetry.Path"
+@ApiStatus.Internal
+val POETRY_TOOL_ID: ToolId = ToolId("poetry")
/**
* Tells if the SDK was added as poetry.
@@ -14,4 +17,5 @@ var PropertiesComponent.poetryPath: @SystemDependent String?
get() = getValue(POETRY_PATH_SETTING)
set(value) {
setValue(POETRY_PATH_SETTING, value)
- }
\ No newline at end of file
+ }
+private const val POETRY_PATH_SETTING: String = "PyCharm.Poetry.Path"
diff --git a/python/python-pyproject/BUILD.bazel b/python/python-pyproject/BUILD.bazel
index dad4e9d4f607..49fe746f1f28 100644
--- a/python/python-pyproject/BUILD.bazel
+++ b/python/python-pyproject/BUILD.bazel
@@ -38,6 +38,7 @@ jvm_library(
"//platform/workspace/jps",
"//platform/projectModel-impl",
"//platform/projectModel-api:projectModel",
+ "//python/common",
],
exports = ["@lib//:tuweni-toml"]
)
@@ -71,6 +72,7 @@ jvm_library(
"//platform/workspace/jps",
"//platform/projectModel-impl",
"//platform/projectModel-api:projectModel",
+ "//python/common",
],
exports = ["@lib//:tuweni-toml"]
)
diff --git a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntityModifications.kt b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntityModifications.kt
index e129b3c445ee..abcc8b531fb0 100644
--- a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntityModifications.kt
+++ b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntityModifications.kt
@@ -6,7 +6,7 @@ import com.intellij.platform.workspace.jps.entities.ModuleEntityBuilder
import com.intellij.platform.workspace.jps.entities.ModuleId
import com.intellij.platform.workspace.storage.*
import com.intellij.platform.workspace.storage.annotations.Parent
-import com.jetbrains.python.ToolId
+import com.intellij.python.common.tools.ToolId
@GeneratedCodeApiVersion(3)
internal interface PyProjectTomlWorkspaceEntityBuilder : WorkspaceEntityBuilder {
diff --git a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/MetadataStorageImpl.kt b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/MetadataStorageImpl.kt
index 7f2534e0f0f9..fa0a4348c5ae 100644
--- a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/MetadataStorageImpl.kt
+++ b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/MetadataStorageImpl.kt
@@ -42,7 +42,7 @@ internal object MetadataStorageImpl : MetadataStorageBase() {
OwnPropertyMetadata(isComputable = false, isKey = false, isOpen = false, name = "participatedTools",
valueType = ValueTypeMetadata.ParameterizedType(generics = listOf(
ValueTypeMetadata.SimpleType.CustomType(isNullable = false, typeMetadata = FinalClassMetadata.ClassMetadata(
- fqName = "com.jetbrains.python.ToolId", properties = listOf(
+ fqName = "com.intellij.python.common.tools.ToolId", properties = listOf(
OwnPropertyMetadata(isComputable = false, isKey = false, isOpen = false, name = "id",
valueType = primitiveTypeStringNotNullable, withDefault = false)),
supertypes = listOf())),
@@ -70,8 +70,8 @@ internal object MetadataStorageImpl : MetadataStorageBase() {
}
override fun initializeMetadataHash() {
- addMetadataHash(typeFqn = "com.intellij.python.pyproject.model.internal.PyProjectTomlWorkspaceEntity", metadataHash = 674942214)
- addMetadataHash(typeFqn = "com.jetbrains.python.ToolId", metadataHash = 434494956)
+ addMetadataHash(typeFqn = "com.intellij.python.pyproject.model.internal.PyProjectTomlWorkspaceEntity", metadataHash = 1939139269)
+ addMetadataHash(typeFqn = "com.intellij.python.common.tools.ToolId", metadataHash = -1193602517)
addMetadataHash(typeFqn = "com.intellij.platform.workspace.jps.entities.ModuleId", metadataHash = -575206713)
addMetadataHash(typeFqn = "com.intellij.platform.workspace.storage.EntitySource", metadataHash = -1282078904)
addMetadataHash(typeFqn = "com.intellij.python.pyproject.model.internal.PyProjectTomlEntitySource", metadataHash = -1054650782)
diff --git a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/PyProjectTomlWorkspaceEntityImpl.kt b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/PyProjectTomlWorkspaceEntityImpl.kt
index 54000f62af30..8bf0f6ef5f76 100644
--- a/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/PyProjectTomlWorkspaceEntityImpl.kt
+++ b/python/python-pyproject/gen/com/intellij/python/pyproject/model/internal/impl/PyProjectTomlWorkspaceEntityImpl.kt
@@ -15,9 +15,9 @@ import com.intellij.platform.workspace.storage.instrumentation.EntityStorageInst
import com.intellij.platform.workspace.storage.instrumentation.EntityStorageInstrumentationApi
import com.intellij.platform.workspace.storage.instrumentation.MutableEntityStorageInstrumentation
import com.intellij.platform.workspace.storage.metadata.model.EntityMetadata
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.pyproject.model.internal.PyProjectTomlWorkspaceEntity
import com.intellij.python.pyproject.model.internal.PyProjectTomlWorkspaceEntityBuilder
-import com.jetbrains.python.ToolId
@GeneratedCodeApiVersion(3)
@GeneratedCodeImplVersion(7)
diff --git a/python/python-pyproject/intellij.python.pyproject.iml b/python/python-pyproject/intellij.python.pyproject.iml
index 9a62908aa58d..85f92a389608 100644
--- a/python/python-pyproject/intellij.python.pyproject.iml
+++ b/python/python-pyproject/intellij.python.pyproject.iml
@@ -31,5 +31,6 @@
+
\ No newline at end of file
diff --git a/python/python-pyproject/resources/intellij.python.pyproject.xml b/python/python-pyproject/resources/intellij.python.pyproject.xml
index 441a7efc420f..f6824c24efab 100644
--- a/python/python-pyproject/resources/intellij.python.pyproject.xml
+++ b/python/python-pyproject/resources/intellij.python.pyproject.xml
@@ -4,6 +4,7 @@
+
messages.PyProjectTomlBundle
diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/api/sdkSuggestionTools.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/api/sdkSuggestionTools.kt
index 9c9e4b850b3a..d55b311562b3 100644
--- a/python/python-pyproject/src/com/intellij/python/pyproject/model/api/sdkSuggestionTools.kt
+++ b/python/python-pyproject/src/com/intellij/python/pyproject/model/api/sdkSuggestionTools.kt
@@ -1,8 +1,8 @@
package com.intellij.python.pyproject.model.api
import com.intellij.openapi.module.Module
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.pyproject.model.internal.suggestSdkImpl
-import com.jetbrains.python.ToolId
sealed interface SuggestedSdk {
diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntity.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntity.kt
index 3e45068038f6..686e80a52946 100644
--- a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntity.kt
+++ b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/PyProjectTomlWorkspaceEntity.kt
@@ -4,7 +4,7 @@ import com.intellij.platform.workspace.jps.entities.ModuleEntity
import com.intellij.platform.workspace.jps.entities.ModuleId
import com.intellij.platform.workspace.storage.*
import com.intellij.platform.workspace.storage.annotations.Parent
-import com.jetbrains.python.ToolId
+import com.intellij.python.common.tools.ToolId
internal interface PyProjectTomlWorkspaceEntity : WorkspaceEntity {
diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/workspaceTools.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/workspaceTools.kt
index 3d3cf0cc1129..380570b559e3 100644
--- a/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/workspaceTools.kt
+++ b/python/python-pyproject/src/com/intellij/python/pyproject/model/internal/workspaceTools.kt
@@ -19,11 +19,11 @@ import com.intellij.platform.workspace.storage.MutableEntityStorage
import com.intellij.platform.workspace.storage.impl.url.toVirtualFileUrl
import com.intellij.platform.workspace.storage.url.VirtualFileUrl
import com.intellij.platform.workspace.storage.url.VirtualFileUrlManager
+import com.intellij.python.common.tools.ToolId
import com.intellij.python.pyproject.PyProjectToml
import com.intellij.python.pyproject.model.api.ModelRebuiltListener
import com.intellij.python.pyproject.model.spi.*
import com.intellij.util.messages.Topic
-import com.jetbrains.python.ToolId
import com.jetbrains.python.venvReader.Directory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.sync.Mutex
diff --git a/python/python-pyproject/src/com/intellij/python/pyproject/model/spi/Tool.kt b/python/python-pyproject/src/com/intellij/python/pyproject/model/spi/Tool.kt
index 10b4819f2fee..87fdaea1e132 100644
--- a/python/python-pyproject/src/com/intellij/python/pyproject/model/spi/Tool.kt
+++ b/python/python-pyproject/src/com/intellij/python/pyproject/model/spi/Tool.kt
@@ -2,8 +2,8 @@ package com.intellij.python.pyproject.model.spi
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.util.NlsSafe
+import com.intellij.python.common.tools.ToolId
import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.venvReader.Directory
import org.apache.tuweni.toml.TomlTable
diff --git a/python/python-sdk-configurator/backend/BUILD.bazel b/python/python-sdk-configurator/backend/BUILD.bazel
index 5bd95787823c..09ebf4b60b1a 100644
--- a/python/python-sdk-configurator/backend/BUILD.bazel
+++ b/python/python-sdk-configurator/backend/BUILD.bazel
@@ -35,6 +35,7 @@ jvm_library(
"//platform/kernel/rpc.backend",
"//platform/remote-topics/shared:rpc-topics",
"//python/python-sdk-configurator/common",
+ "//python/common",
]
)
### auto-generated section `build intellij.python.sdkConfigurator.backend` end
\ No newline at end of file
diff --git a/python/python-sdk-configurator/backend/intellij.python.sdkConfigurator.backend.iml b/python/python-sdk-configurator/backend/intellij.python.sdkConfigurator.backend.iml
index 921b21b39dec..09afa764ad15 100644
--- a/python/python-sdk-configurator/backend/intellij.python.sdkConfigurator.backend.iml
+++ b/python/python-sdk-configurator/backend/intellij.python.sdkConfigurator.backend.iml
@@ -47,5 +47,6 @@
+
\ No newline at end of file
diff --git a/python/python-sdk-configurator/backend/resources/intellij.python.sdkConfigurator.backend.xml b/python/python-sdk-configurator/backend/resources/intellij.python.sdkConfigurator.backend.xml
index 1ee5941f00c6..21c50271b6b5 100644
--- a/python/python-sdk-configurator/backend/resources/intellij.python.sdkConfigurator.backend.xml
+++ b/python/python-sdk-configurator/backend/resources/intellij.python.sdkConfigurator.backend.xml
@@ -6,6 +6,7 @@
+
messages.PySdkConfiguratorBundle
diff --git a/python/python-sdk-ui/BUILD.bazel b/python/python-sdk-ui/BUILD.bazel
index d6f74b64adfe..265288673acc 100644
--- a/python/python-sdk-ui/BUILD.bazel
+++ b/python/python-sdk-ui/BUILD.bazel
@@ -28,8 +28,8 @@ jvm_library(
"//libraries/caffeine",
"@lib//:io-github-z4kn4fein-semver-jvm",
"//python/python-exec-service:community-execService",
- "//python/poetry",
- "//python/impl.uv",
+ "//python/python-poetry/common",
+ "//python/python-uv/common",
]
)
### auto-generated section `build intellij.python.sdk.ui` end
\ No newline at end of file
diff --git a/python/python-sdk-ui/intellij.python.sdk.ui.iml b/python/python-sdk-ui/intellij.python.sdk.ui.iml
index 225964f4b84e..57479e805d6e 100644
--- a/python/python-sdk-ui/intellij.python.sdk.ui.iml
+++ b/python/python-sdk-ui/intellij.python.sdk.ui.iml
@@ -23,7 +23,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml b/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml
index 8c1a97316468..260309722c86 100644
--- a/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml
+++ b/python/python-sdk-ui/resources/intellij.python.sdk.ui.xml
@@ -2,8 +2,8 @@
-
-
+
+
diff --git a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt
index 4ed42bcbf381..b0190d00121e 100644
--- a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt
+++ b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/tool/poetry/sdk/PoetryEvoSdkManager.kt
@@ -3,23 +3,21 @@ package com.intellij.python.sdk.ui.evolution.tool.poetry.sdk
//import com.jetbrains.python.sdk.poetry.PyPoetrySdkAdditionalData
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
-import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons
-import com.intellij.python.community.impl.poetry.impl.POETRY_UI_INFO
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
import com.intellij.python.sdk.ui.evolution.sdk.EvoSdk
import com.intellij.python.sdk.ui.evolution.sdk.EvoSdkProvider
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.jetbrains.python.sdk.impl.resolvePythonHome
import java.nio.file.Path
import kotlin.io.path.name
-internal object PoetryEvoSdkManager {
+internal object PoetryEvoSdkManager {
fun buildEvoSdk(module: Module, pythonBinaryPath: Path): EvoSdk {
val sdkHome = pythonBinaryPath.resolvePythonHome()
val venvName = sdkHome.name
val name = venvName.takeIf { !it.startsWith(module.name.lowercase()) }
return EvoSdk(
- icon = PythonCommunityImplPoetryIcons.Poetry,
+ icon = PythonCommunityImplPoetryCommonIcons.Poetry,
name = name,
pythonBinaryPath = pythonBinaryPath,
)
diff --git a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt
index 3756003c1c95..5c8b18faee5d 100644
--- a/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt
+++ b/python/python-sdk-ui/src/com/intellij/python/sdk/ui/evolution/ui/autoconfiguration.kt
@@ -3,13 +3,12 @@ package com.intellij.python.sdk.ui.evolution.ui
import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.intellij.python.sdk.ui.PySdkUiBundle
import com.intellij.python.sdk.ui.evolution.sdk.EvoModuleSdk
import com.intellij.python.sdk.ui.evolution.ui.components.EvoTreeLazyNodeElement
import com.intellij.python.sdk.ui.evolution.ui.components.EvoTreeLeafElement
import com.intellij.python.sdk.ui.evolution.ui.components.EvoTreeSection
-import com.intellij.python.sdk.ui.icons.PythonSdkUIIcons
import com.jetbrains.python.Result
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension
@@ -25,7 +24,7 @@ internal val autoSetupWithAIAction = object : AnAction(
internal val defaultUvAction = object : AnAction(
{ PySdkUiBundle.message("evo.sdk.status.bar.popup.shortcuts.uv") },
{ "" },
- PythonCommunityImplUVIcons.UV,
+ PythonCommunityImplUVCommonIcons.UV,
) {
override fun actionPerformed(e: AnActionEvent) {
}
diff --git a/python/python-sdk/BUILD.bazel b/python/python-sdk/BUILD.bazel
index b85b0a5b800e..e98069e06872 100644
--- a/python/python-sdk/BUILD.bazel
+++ b/python/python-sdk/BUILD.bazel
@@ -47,6 +47,7 @@ jvm_library(
"//platform/progress/shared:ide-progress",
"//platform/eel-provider",
"//python/impl.helperLocator:community-helpersLocator",
+ "//python/common",
],
runtime_deps = ["//platform/backend"]
)
@@ -88,6 +89,7 @@ jvm_library(
"@lib//:junit5",
"//platform/eel-provider",
"//python/impl.helperLocator:community-helpersLocator",
+ "//python/common",
]
)
### auto-generated section `build intellij.python.sdk` end
diff --git a/python/python-sdk/intellij.python.sdk.iml b/python/python-sdk/intellij.python.sdk.iml
index 7aad6c1b3fd5..276d988785a1 100644
--- a/python/python-sdk/intellij.python.sdk.iml
+++ b/python/python-sdk/intellij.python.sdk.iml
@@ -40,5 +40,6 @@
+
\ No newline at end of file
diff --git a/python/python-sdk/resources/intellij.python.sdk.xml b/python/python-sdk/resources/intellij.python.sdk.xml
index b8f226d1164f..b0398b83505f 100644
--- a/python/python-sdk/resources/intellij.python.sdk.xml
+++ b/python/python-sdk/resources/intellij.python.sdk.xml
@@ -2,6 +2,7 @@
+
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectSdkConfigurationExtension.kt b/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectSdkConfigurationExtension.kt
index 4f2646df20c3..c83738c5a306 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectSdkConfigurationExtension.kt
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectSdkConfigurationExtension.kt
@@ -3,7 +3,7 @@ package com.jetbrains.python.sdk.configuration
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.module.Module
-import com.jetbrains.python.ToolId
+import com.intellij.python.common.tools.ToolId
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.CheckReturnValue
diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectTomlConfigurationExtension.kt b/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectTomlConfigurationExtension.kt
index 3f30ea0081c4..5cc6167226c6 100644
--- a/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectTomlConfigurationExtension.kt
+++ b/python/python-sdk/src/com/jetbrains/python/sdk/configuration/PyProjectTomlConfigurationExtension.kt
@@ -1,7 +1,6 @@
package com.jetbrains.python.sdk.configuration
import com.intellij.openapi.module.Module
-import com.jetbrains.python.ToolId
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
diff --git a/python/poetry/BUILD.bazel b/python/python-uv/backend/BUILD.bazel
similarity index 58%
rename from python/poetry/BUILD.bazel
rename to python/python-uv/backend/BUILD.bazel
index 339a51746972..33d3819bdbf3 100644
--- a/python/poetry/BUILD.bazel
+++ b/python/python-uv/backend/BUILD.bazel
@@ -1,28 +1,27 @@
-### auto-generated section `build intellij.python.community.impl.poetry` start
+### auto-generated section `build intellij.python.community.impl.uv.backend` start
load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup")
resourcegroup(
- name = "poetry_resources",
+ name = "backend_resources",
srcs = glob(["resources/**/*"]),
strip_prefix = "resources"
)
jvm_library(
- name = "poetry",
- module_name = "intellij.python.community.impl.poetry",
+ name = "backend",
+ module_name = "intellij.python.community.impl.uv.backend",
visibility = ["//visibility:public"],
- srcs = glob(["src/**/*.kt", "src/**/*.java", "src/**/*.form", "gen/**/*.kt", "gen/**/*.java"], allow_empty = True),
- resources = [":poetry_resources"],
+ srcs = glob(["src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True),
+ resources = [":backend_resources"],
deps = [
"@lib//:kotlin-stdlib",
+ "//python/python-uv/common",
"@lib//:jetbrains-annotations",
- "//platform/core-api:core",
- "//python/python-sdk:sdk",
- "//python/openapi:community",
- "//plugins/toml/core",
- "//python/python-pyproject:pyproject",
- "//platform/util/base/multiplatform",
"//platform/util",
+ "//python/python-pyproject:pyproject",
+ "//platform/core-api:core",
+ "//python/openapi:community",
+ "//python/common",
]
)
-### auto-generated section `build intellij.python.community.impl.poetry` end
\ No newline at end of file
+### auto-generated section `build intellij.python.community.impl.uv.backend` end
\ No newline at end of file
diff --git a/python/impl.uv/intellij.python.community.impl.uv.iml b/python/python-uv/backend/intellij.python.community.impl.uv.backend.iml
similarity index 80%
rename from python/impl.uv/intellij.python.community.impl.uv.iml
rename to python/python-uv/backend/intellij.python.community.impl.uv.backend.iml
index 70a54141ead6..056949a5eb2c 100644
--- a/python/impl.uv/intellij.python.community.impl.uv.iml
+++ b/python/python-uv/backend/intellij.python.community.impl.uv.backend.iml
@@ -3,18 +3,18 @@
-
-
+
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/python/impl.uv/resources/intellij.python.community.impl.uv.xml b/python/python-uv/backend/resources/intellij.python.community.impl.uv.backend.xml
similarity index 69%
rename from python/impl.uv/resources/intellij.python.community.impl.uv.xml
rename to python/python-uv/backend/resources/intellij.python.community.impl.uv.backend.xml
index 431b17e21191..eedb3007842e 100644
--- a/python/impl.uv/resources/intellij.python.community.impl.uv.xml
+++ b/python/python-uv/backend/resources/intellij.python.community.impl.uv.backend.xml
@@ -4,8 +4,11 @@
+
+
+
-
+
diff --git a/python/impl.uv/src/UvTool.kt b/python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/UvTool.kt
similarity index 94%
rename from python/impl.uv/src/UvTool.kt
rename to python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/UvTool.kt
index 5f5d993d2a78..58108e5c4dce 100644
--- a/python/impl.uv/src/UvTool.kt
+++ b/python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/UvTool.kt
@@ -1,32 +1,29 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.python.community.impl.uv
+package com.intellij.python.community.impl.uv.backend
import com.intellij.openapi.diagnostic.fileLogger
import com.intellij.openapi.util.NlsSafe
import com.intellij.openapi.util.getPathMatcher
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.community.impl.uv.common.UV_TOOL_ID
+import com.intellij.python.community.impl.uv.common.UV_UI_INFO
import com.intellij.python.pyproject.model.spi.ProjectName
import com.intellij.python.pyproject.model.spi.ProjectStructureInfo
import com.intellij.python.pyproject.model.spi.PyProjectTomlProject
import com.intellij.python.pyproject.model.spi.Tool
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.jetbrains.python.PyToolUIInfo
-import com.jetbrains.python.ToolId
import com.jetbrains.python.venvReader.Directory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.apache.tuweni.toml.TomlArray
import org.apache.tuweni.toml.TomlTable
-import org.jetbrains.annotations.ApiStatus
import java.nio.file.InvalidPathException
import java.nio.file.Path
import java.nio.file.PathMatcher
import kotlin.io.path.relativeTo
-@ApiStatus.Internal
-val UV_TOOL_ID: ToolId = ToolId("uv")
-val UV_UI_INFO: PyToolUIInfo = PyToolUIInfo("uv", PythonCommunityImplUVIcons.UV)
internal class UvTool : Tool {
diff --git a/python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/package-info.java b/python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/package-info.java
new file mode 100644
index 000000000000..21f9ada1919e
--- /dev/null
+++ b/python/python-uv/backend/src/com/intellij/python/community/impl/uv/backend/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.community.impl.uv.backend;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/impl.uv/BUILD.bazel b/python/python-uv/common/BUILD.bazel
similarity index 68%
rename from python/impl.uv/BUILD.bazel
rename to python/python-uv/common/BUILD.bazel
index 024ebecd2681..f3382e1fdc42 100644
--- a/python/impl.uv/BUILD.bazel
+++ b/python/python-uv/common/BUILD.bazel
@@ -1,26 +1,24 @@
-### auto-generated section `build intellij.python.community.impl.uv` start
+### auto-generated section `build intellij.python.community.impl.uv.common` start
load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup")
resourcegroup(
- name = "impl.uv_resources",
+ name = "common_resources",
srcs = glob(["resources/**/*"]),
strip_prefix = "resources"
)
jvm_library(
- name = "impl.uv",
- module_name = "intellij.python.community.impl.uv",
+ name = "common",
+ module_name = "intellij.python.community.impl.uv.common",
visibility = ["//visibility:public"],
srcs = glob(["gen/**/*.kt", "gen/**/*.java", "src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True),
- resources = [":impl.uv_resources"],
+ resources = [":common_resources"],
deps = [
"@lib//:kotlin-stdlib",
- "//python/python-pyproject:pyproject",
- "//python/openapi:community",
- "//plugins/toml/core",
"@lib//:jetbrains-annotations",
"//platform/util",
- "//platform/core-api:core",
+ "//python/openapi:community",
+ "//python/common",
]
)
-### auto-generated section `build intellij.python.community.impl.uv` end
\ No newline at end of file
+### auto-generated section `build intellij.python.community.impl.uv.common` end
\ No newline at end of file
diff --git a/python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java b/python/python-uv/common/gen/com/intellij/python/community/impl/uv/common/icons/PythonCommunityImplUVCommonIcons.java
similarity index 69%
rename from python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java
rename to python/python-uv/common/gen/com/intellij/python/community/impl/uv/common/icons/PythonCommunityImplUVCommonIcons.java
index 83b24f801c2a..7852d3e916b0 100644
--- a/python/impl.uv/gen/com/intellij/python/community/impl/uv/icons/PythonCommunityImplUVIcons.java
+++ b/python/python-uv/common/gen/com/intellij/python/community/impl/uv/common/icons/PythonCommunityImplUVCommonIcons.java
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.python.community.impl.uv.icons;
+package com.intellij.python.community.impl.uv.common.icons;
import com.intellij.ui.IconManager;
import org.jetbrains.annotations.NotNull;
@@ -11,9 +11,9 @@ import javax.swing.*;
* DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead
*/
@org.jetbrains.annotations.ApiStatus.Internal
-public final class PythonCommunityImplUVIcons {
+public final class PythonCommunityImplUVCommonIcons {
private static @NotNull Icon load(@NotNull String path, int cacheKey, int flags) {
- return IconManager.getInstance().loadRasterizedIcon(path, PythonCommunityImplUVIcons.class.getClassLoader(), cacheKey, flags);
+ return IconManager.getInstance().loadRasterizedIcon(path, PythonCommunityImplUVCommonIcons.class.getClassLoader(), cacheKey, flags);
}
- /** 16x16 */ public static final @NotNull Icon UV = load("images/com/intellij/python/community/impl/uv/expui/uv.svg", -856014559, 0);
+ /** 16x16 */ public static final @NotNull Icon UV = load("images/intellij/python/community/impl/uv/common/expui/uv.svg", -856014559, 0);
}
diff --git a/python/python-uv/common/intellij.python.community.impl.uv.common.iml b/python/python-uv/common/intellij.python.community.impl.uv.common.iml
new file mode 100644
index 000000000000..844767c0e79f
--- /dev/null
+++ b/python/python-uv/common/intellij.python.community.impl.uv.common.iml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/impl.uv/resources/images/com/intellij/python/community/impl/uv/expui/uv.svg b/python/python-uv/common/resources/images/intellij/python/community/impl/uv/common/expui/uv.svg
similarity index 100%
rename from python/impl.uv/resources/images/com/intellij/python/community/impl/uv/expui/uv.svg
rename to python/python-uv/common/resources/images/intellij/python/community/impl/uv/common/expui/uv.svg
diff --git a/python/python-uv/common/resources/intellij.python.community.impl.uv.common.xml b/python/python-uv/common/resources/intellij.python.community.impl.uv.common.xml
new file mode 100644
index 000000000000..723af168216c
--- /dev/null
+++ b/python/python-uv/common/resources/intellij.python.community.impl.uv.common.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/python/python-uv/common/src/impl/UvToolIdMapper.kt b/python/python-uv/common/src/impl/UvToolIdMapper.kt
new file mode 100644
index 000000000000..de43412446a7
--- /dev/null
+++ b/python/python-uv/common/src/impl/UvToolIdMapper.kt
@@ -0,0 +1,13 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.python.community.impl.uv.common.impl
+
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.common.tools.spi.ToolIdToIconMapper
+import com.intellij.python.community.impl.uv.common.UV_TOOL_ID
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
+import javax.swing.Icon
+
+internal class UvToolIdMapper : ToolIdToIconMapper {
+ override val id: ToolId = UV_TOOL_ID
+ override val icon: Icon = PythonCommunityImplUVCommonIcons.UV
+}
\ No newline at end of file
diff --git a/python/python-uv/common/src/impl/package-info.java b/python/python-uv/common/src/impl/package-info.java
new file mode 100644
index 000000000000..f348ac9e96c1
--- /dev/null
+++ b/python/python-uv/common/src/impl/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@ApiStatus.Internal
+package com.intellij.python.community.impl.uv.common.impl;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/python-uv/common/src/package-info.java b/python/python-uv/common/src/package-info.java
new file mode 100644
index 000000000000..ada305cca64b
--- /dev/null
+++ b/python/python-uv/common/src/package-info.java
@@ -0,0 +1,5 @@
+@ApiStatus.Internal
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.python.community.impl.uv.common;
+
+import org.jetbrains.annotations.ApiStatus;
\ No newline at end of file
diff --git a/python/python-uv/common/src/uvId.kt b/python/python-uv/common/src/uvId.kt
new file mode 100644
index 000000000000..a557be47b66d
--- /dev/null
+++ b/python/python-uv/common/src/uvId.kt
@@ -0,0 +1,11 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.python.community.impl.uv.common
+
+import com.intellij.python.common.tools.ToolId
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
+import com.jetbrains.python.PyToolUIInfo
+
+val UV_TOOL_ID: ToolId = ToolId("uv")
+
+// TODO: Move this symbol to backend as soon as all usages are moved to backend
+val UV_UI_INFO: PyToolUIInfo = PyToolUIInfo("uv", PythonCommunityImplUVCommonIcons.UV)
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/common.kt b/python/src/com/jetbrains/python/sdk/add/v2/common.kt
index 17fd9aa54c9e..05bdd27ca017 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/common.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/common.kt
@@ -29,8 +29,8 @@ import com.intellij.python.community.execService.Args
import com.intellij.python.community.execService.BinaryToExec
import com.intellij.python.community.execService.ExecService
import com.intellij.python.community.execService.execGetStdout
-import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.intellij.python.hatch.icons.PythonHatchIcons
import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.Panel
@@ -143,9 +143,9 @@ enum class PythonSupportedEnvironmentManagers(
) {
VIRTUALENV("sdk.create.custom.virtualenv", PythonIcons.Python.Virtualenv, { true }),
CONDA("sdk.create.custom.conda", PythonIcons.Python.Anaconda, { true }),
- POETRY("sdk.create.custom.poetry", PythonCommunityImplPoetryIcons.Poetry),
+ POETRY("sdk.create.custom.poetry", PythonCommunityImplPoetryCommonIcons.Poetry),
PIPENV("sdk.create.custom.pipenv", PIPENV_ICON),
- UV("sdk.create.custom.uv", PythonCommunityImplUVIcons.UV),
+ UV("sdk.create.custom.uv", PythonCommunityImplUVCommonIcons.UV),
HATCH("sdk.create.custom.hatch", PythonHatchIcons.Logo, { it is FileSystem.Eel }),
PYTHON("sdk.create.custom.python", PythonParserIcons.PythonFile, { true })
}
diff --git a/python/src/com/jetbrains/python/sdk/add/v2/poetry/EnvironmentCreatorPoetry.kt b/python/src/com/jetbrains/python/sdk/add/v2/poetry/EnvironmentCreatorPoetry.kt
index ed8e14711a3a..db61a6af01b0 100644
--- a/python/src/com/jetbrains/python/sdk/add/v2/poetry/EnvironmentCreatorPoetry.kt
+++ b/python/src/com/jetbrains/python/sdk/add/v2/poetry/EnvironmentCreatorPoetry.kt
@@ -9,7 +9,7 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.ui.validation.DialogValidationRequestor
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.platform.eel.LocalEelApi
-import com.intellij.python.community.impl.poetry.poetryPath
+import com.intellij.python.community.impl.poetry.common.poetryPath
import com.intellij.python.pyproject.PyProjectToml
import com.intellij.ui.dsl.builder.Panel
import com.intellij.ui.dsl.builder.bindSelected
diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt
index c70f0196e3a3..d6ad1cf77f9d 100644
--- a/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt
+++ b/python/src/com/jetbrains/python/sdk/poetry/PoetryCommandExecutor.kt
@@ -14,7 +14,7 @@ import com.intellij.python.community.execService.Args
import com.intellij.python.community.execService.BinOnEel
import com.intellij.python.community.execService.ExecService
import com.intellij.python.community.execService.execGetStdout
-import com.intellij.python.community.impl.poetry.poetryPath
+import com.intellij.python.community.impl.poetry.common.poetryPath
import com.intellij.python.pyproject.PY_PROJECT_TOML
import com.jetbrains.python.*
import com.jetbrains.python.errorProcessing.PyResult
diff --git a/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt b/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt
index 5b5ee8b4074f..d4671e8ffe03 100644
--- a/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt
+++ b/python/src/com/jetbrains/python/sdk/poetry/PoetrySdkProvider.kt
@@ -3,7 +3,7 @@ package com.jetbrains.python.sdk.poetry
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.SdkAdditionalData
-import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.PyInterpreterInspectionQuickFixData
import com.jetbrains.python.sdk.PySdkProvider
@@ -37,7 +37,7 @@ class PoetrySdkProvider : PySdkProvider {
override fun getSdkAdditionalText(sdk: Sdk): String? = if (sdk.isPoetry) sdk.versionString else null
override fun getSdkIcon(sdk: Sdk): Icon? {
- return if (sdk.isPoetry) PythonCommunityImplPoetryIcons.Poetry else null
+ return if (sdk.isPoetry) PythonCommunityImplPoetryCommonIcons.Poetry else null
}
override fun loadAdditionalDataForSdk(element: Element): SdkAdditionalData? {
diff --git a/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt b/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt
index 6553ecab24ba..18f8076ce3ee 100644
--- a/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt
+++ b/python/src/com/jetbrains/python/sdk/poetry/PyPoetrySdkFlavor.kt
@@ -1,7 +1,7 @@
// 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.poetry
-import com.intellij.python.community.impl.poetry.icons.PythonCommunityImplPoetryIcons
+import com.intellij.python.community.impl.poetry.common.icons.PythonCommunityImplPoetryCommonIcons
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor
import com.jetbrains.python.sdk.flavors.PyFlavorData
import com.jetbrains.python.sdk.flavors.PythonFlavorProvider
@@ -13,7 +13,7 @@ import javax.swing.Icon
*/
object PyPoetrySdkFlavor : CPythonSdkFlavor() {
- override fun getIcon(): Icon = PythonCommunityImplPoetryIcons.Poetry
+ override fun getIcon(): Icon = PythonCommunityImplPoetryCommonIcons.Poetry
override fun getFlavorDataClass(): Class = PyFlavorData.Empty::class.java
override fun isValidSdkPath(pathStr: String): Boolean = false
diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt b/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt
index aced2e4385c9..945beceed7b9 100644
--- a/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/UvSdkFlavorAndData.kt
@@ -1,7 +1,7 @@
// 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.uv
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.jetbrains.python.sdk.PythonSdkAdditionalData
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor
import com.jetbrains.python.sdk.flavors.PyFlavorData
@@ -68,7 +68,7 @@ class UvSdkAdditionalData : PythonSdkAdditionalData {
}
object UvSdkFlavor : CPythonSdkFlavor() {
- override fun getIcon(): Icon = PythonCommunityImplUVIcons.UV
+ override fun getIcon(): Icon = PythonCommunityImplUVCommonIcons.UV
override fun getFlavorDataClass(): Class = PyFlavorData.Empty::class.java
override fun isValidSdkPath(pathStr: String): Boolean {
diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt b/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt
index fca35ca5737a..5337d68a52d8 100644
--- a/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/UvSdkProvider.kt
@@ -4,7 +4,7 @@ package com.jetbrains.python.sdk.uv
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.SdkAdditionalData
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.PyInterpreterInspectionQuickFixData
import com.jetbrains.python.sdk.PySdkProvider
@@ -34,7 +34,7 @@ class UvSdkProvider : PySdkProvider {
override fun getSdkAdditionalText(sdk: Sdk): String? = if (sdk.isUv) sdk.versionString else null
override fun getSdkIcon(sdk: Sdk): Icon? {
- return if (sdk.isUv) PythonCommunityImplUVIcons.UV else null
+ return if (sdk.isUv) PythonCommunityImplUVCommonIcons.UV else null
}
override fun loadAdditionalDataForSdk(element: Element): SdkAdditionalData? {
diff --git a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt
index 18c62e187bee..d467502be62d 100644
--- a/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/UvSystemPythonProvider.kt
@@ -3,7 +3,9 @@ package com.jetbrains.python.sdk.uv
import com.intellij.platform.eel.EelApi
import com.intellij.platform.eel.provider.localEel
-import com.intellij.python.community.impl.uv.UV_UI_INFO
+import com.intellij.python.community.impl.uv.common.UV_TOOL_ID
+import com.intellij.python.community.impl.uv.common.UV_UI_INFO
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.intellij.python.community.services.systemPython.SystemPythonProvider
import com.jetbrains.python.PyToolUIInfo
import com.jetbrains.python.PythonBinary
diff --git a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt
index 9025f346cca3..ed058718fe52 100644
--- a/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt
+++ b/python/src/com/jetbrains/python/sdk/uv/run/UvRunConfigurationType.kt
@@ -3,7 +3,7 @@ package com.jetbrains.python.sdk.uv.run
import com.intellij.execution.configurations.ConfigurationTypeBase
import com.intellij.openapi.util.NotNullLazyValue
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.jetbrains.python.PyBundle
import com.jetbrains.python.icons.PythonIcons
@@ -14,7 +14,7 @@ internal class UvRunConfigurationType :
UV_CONFIGURATION_ID,
PyBundle.message("uv.run.configuration.type.display.name"),
PyBundle.message("uv.run.configuration.type.description"),
- NotNullLazyValue.createValue { PythonCommunityImplUVIcons.UV },
+ NotNullLazyValue.createValue { PythonCommunityImplUVCommonIcons.UV },
) {
init {
addFactory(UvRunConfigurationFactory(this))
diff --git a/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt b/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt
index 158d05947fca..8db648962f63 100644
--- a/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt
+++ b/python/src/com/jetbrains/python/uv/sdk/evolution/UvSelectSdkProvider.kt
@@ -1,7 +1,7 @@
package com.jetbrains.python.uv.sdk.evolution
import com.intellij.openapi.ui.popup.ListSeparator
-import com.intellij.python.community.impl.uv.icons.PythonCommunityImplUVIcons
+import com.intellij.python.community.impl.uv.common.icons.PythonCommunityImplUVCommonIcons
import com.jetbrains.python.Result
import com.jetbrains.python.errorProcessing.PyResult
import com.jetbrains.python.sdk.basePath
@@ -24,7 +24,7 @@ import kotlin.collections.component2
private class UvSelectSdkProvider() : EvoSelectSdkProvider {
override fun getTreeElement(evoModuleSdk: EvoModuleSdk): EvoTreeLazyNodeElement {
- val icon = PythonCommunityImplUVIcons.UV
+ val icon = PythonCommunityImplUVCommonIcons.UV
return EvoTreeLazyNodeElement("uv", icon) {
getUvExecutable() ?: return@EvoTreeLazyNodeElement PyResult.localizedError(PyBundle.message("evolution.uv.executable.is.not.found"))