Python NPW and Add SDK refactoring:

In SDK:
* `v1`: legacy API that should be dropped (but still used by Python Plugin and DS)
* `v2`: slightly better API used both for new project and interpreter settings. Supports DSL UI validation. Must be adopted by DS and Python Plugin somehow.

In NPW:
* `newProject`, `newProject/steps` (aka `v1`) deprecated, used only by DS and Python Plugin.
* `newProjectWizard` (aka PyV3): the right new API to use. Sooner or later will be adopted by DS and Python Plugin

GitOrigin-RevId: c3d49ce95079dc5ba589955381ddfe42326295fd
This commit is contained in:
Ilya.Kazakevich
2024-09-23 21:14:22 +00:00
committed by intellij-monorepo-bot
parent cf57f8dd5a
commit 3689a45984
104 changed files with 396 additions and 316 deletions
@@ -10,7 +10,7 @@ import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PromoPages
import com.intellij.openapi.util.NlsSafe
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.newProject.promotion.PromoProjectGenerator
import com.jetbrains.python.newProjectWizard.promotion.PromoProjectGenerator
import javax.swing.Icon
import javax.swing.JPanel
@@ -9,7 +9,7 @@ import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PromoFeatur
import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PromoPages
import com.intellij.openapi.util.NlsSafe
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.newProject.promotion.PromoProjectGenerator
import com.jetbrains.python.newProjectWizard.promotion.PromoProjectGenerator
import javax.swing.Icon
import javax.swing.JPanel
@@ -43,7 +43,7 @@
<directoryProjectConfigurator implementation="com.intellij.pycharm.community.ide.impl.PythonSourceRootConfigurator" id="sourceRoot"
order="after sdk"/>
<directoryProjectConfigurator implementation="com.intellij.pycharm.community.ide.impl.PlatformInspectionProfileConfigurator"/>
<directoryProjectConfigurator implementation="com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeConfigurator"
<directoryProjectConfigurator implementation="com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeConfigurator"
id="welcome" order="last"/>
<applicationService serviceInterface="com.intellij.openapi.module.ModuleTypeManager"
@@ -70,8 +70,8 @@
<directoryIndexExcludePolicy implementation="com.intellij.pycharm.community.ide.impl.PyDirectoryIndexExcludePolicy"/>
<applicationService serviceImplementation="com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeSettings"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector"/>
<applicationService serviceImplementation="com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeSettings"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector"/>
<notificationGroup id="PyCharm Professional Advertiser" displayType="STICKY_BALLOON" isLogByDefault="false"
bundle="messages.PyCharmCommunityCustomizationBundle" key="notification.group.pro.advertiser"/>
@@ -98,13 +98,13 @@
<actions resource-bundle="messages.ActionsBundle">
<action id="PySwitchSdkAction" class="com.intellij.pycharm.community.ide.impl.configuration.PySwitchSdkAction"/>
<action id="NewDirectoryProject" class="com.intellij.pycharm.community.ide.impl.newProject.PyCharmNewProjectAction">
<action id="NewDirectoryProject" class="com.intellij.pycharm.community.ide.impl.newProjectWizard.PyCharmNewProjectAction">
<add-to-group group-id="NewProjectOrModuleGroup"/>
</action>
<group id="WelcomeScreen.Platform.NewProject">
<group id="WelcomeScreen.CreateDirectoryProject"
class="com.intellij.pycharm.community.ide.impl.newProject.impl.PyV3NewProjectStepAction"/>
class="com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.PyV3NewProjectStepAction"/>
<reference ref="WelcomeScreen.OpenDirectoryProject"/>
<add-to-group group-id="WelcomeScreen.QuickStart" anchor="first"/>
@@ -26,9 +26,9 @@ import com.jetbrains.python.configuration.PyConfigurableInterpreterList
import com.jetbrains.python.pathValidation.PlatformAndRoot
import com.jetbrains.python.psi.PyUtil
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.sdk.add.PyAddNewCondaEnvFromFilePanel
import com.jetbrains.python.sdk.add.target.conda.createCondaSdkAlongWithNewEnv
import com.jetbrains.python.sdk.add.target.conda.suggestCondaPath
import com.jetbrains.python.sdk.add.v1.PyAddNewCondaEnvFromFilePanel
import com.jetbrains.python.sdk.conda.createCondaSdkAlongWithNewEnv
import com.jetbrains.python.sdk.conda.suggestCondaPath
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.CondaEnvResult
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.InputData
@@ -37,7 +37,7 @@ import com.jetbrains.python.packaging.PyPackageUtil
import com.jetbrains.python.packaging.PyTargetEnvironmentPackageManager
import com.jetbrains.python.requirements.RequirementsFileType
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.PyAddNewVirtualEnvFromFilePanel
import com.jetbrains.python.sdk.add.v1.PyAddNewVirtualEnvFromFilePanel
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension
import com.jetbrains.python.sdk.configuration.createVirtualEnvSynchronously
import java.awt.BorderLayout
@@ -0,0 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* @deprecated use {@link com.intellij.pycharm.community.ide.impl.newProjectWizard}
*/
@Deprecated
package com.intellij.pycharm.community.ide.impl.newProject.steps;
@@ -1,11 +1,14 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject;
package com.intellij.pycharm.community.ide.impl.newProjectWizard;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
import org.jetbrains.annotations.NotNull;
public final class PyCharmNewProjectAction extends DumbAwareAction {
/**
* New project wizard entry point
*/
final class PyCharmNewProjectAction extends DumbAwareAction {
@Override
public void actionPerformed(@NotNull final AnActionEvent e) {
@@ -1,12 +1,12 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject;
package com.intellij.pycharm.community.ide.impl.newProjectWizard;
import com.intellij.ide.util.projectWizard.AbstractNewProjectDialog;
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep;
import com.intellij.pycharm.community.ide.impl.newProject.impl.PyV3NewProjectStepAction;
import com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.PyV3NewProjectStepAction;
import org.jetbrains.annotations.NotNull;
public final class PyCharmNewProjectDialog extends AbstractNewProjectDialog {
final class PyCharmNewProjectDialog extends AbstractNewProjectDialog {
@Override
protected @NotNull AbstractNewProjectStep<?> createNewProjectStep() {
return new PyV3NewProjectStepAction();
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.impl
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase
@@ -8,15 +8,15 @@ import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.openapi.wm.impl.welcomeScreen.collapsedActionGroup.CollapsedActionGroup
import com.intellij.platform.DirectoryProjectGenerator
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
import com.intellij.pycharm.community.ide.impl.newProject.impl.emptyProject.PyV3EmptyProjectGenerator
import com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.emptyProject.PyV3EmptyProjectGenerator
import com.intellij.pycharm.community.ide.impl.newProject.steps.PythonGenerateProjectCallback
import com.jetbrains.python.newProject.PyNewProjectSettings
import com.jetbrains.python.newProject.PythonProjectGenerator
import com.jetbrains.python.newProject.promotion.PromoProjectGenerator
import com.jetbrains.python.newProject.promotion.PromoStep
import com.jetbrains.python.newProject.steps.PythonProjectSpecificSettingsStep
import com.jetbrains.python.newProjectWizard.PyV3BaseProjectSettings
import com.jetbrains.python.newProjectWizard.PyV3ProjectBaseGenerator
import com.jetbrains.python.newProjectWizard.promotion.PromoProjectGenerator
import com.jetbrains.python.newProjectWizard.promotion.PromoStep
internal class PyV3NewProjectStepAction : AbstractNewProjectStep<PyV3BaseProjectSettings>(PyV3Customization) {
@@ -60,7 +60,8 @@ internal class PyV3NewProjectStepAction : AbstractNewProjectStep<PyV3BaseProject
*/
@Suppress("UNCHECKED_CAST", "DEPRECATION")
private fun createLegacyStep(projectGenerator: PythonProjectGenerator<*>): ProjectSettingsStepBase<PyV3BaseProjectSettings> {
return PythonProjectSpecificSettingsStep(projectGenerator as PythonProjectGenerator<PyNewProjectSettings>, PythonGenerateProjectCallback()) as ProjectSettingsStepBase<PyV3BaseProjectSettings>
return PythonProjectSpecificSettingsStep(projectGenerator as PythonProjectGenerator<PyNewProjectSettings>,
PythonGenerateProjectCallback()) as ProjectSettingsStepBase<PyV3BaseProjectSettings>
}
}
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.impl
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.impl.emptyProject
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.emptyProject
import com.jetbrains.python.newProjectWizard.PyV3ProjectBaseGenerator
import com.jetbrains.python.PyBundle
@@ -7,7 +7,7 @@ import com.jetbrains.python.psi.icons.PythonPsiApiIcons
import org.jetbrains.annotations.Nls
import javax.swing.Icon
class PyV3EmptyProjectGenerator : PyV3ProjectBaseGenerator<PyV3EmptyProjectSettings>(
internal class PyV3EmptyProjectGenerator : PyV3ProjectBaseGenerator<PyV3EmptyProjectSettings>(
PyV3EmptyProjectSettings(generateWelcomeScript = false), PyV3EmptyProjectUI, _newProjectName = "PythonProject") {
override fun getName(): @Nls String = PyBundle.message("pure.python.project")
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.impl.emptyProject
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.emptyProject
import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.writeAction
@@ -8,7 +8,7 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.vfs.VirtualFile
import com.jetbrains.python.newProjectWizard.PyV3ProjectTypeSpecificSettings
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcome
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcome
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.impl.emptyProject
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.emptyProject
import com.intellij.ui.dsl.builder.Panel
import com.jetbrains.python.newProjectWizard.PyV3ProjectTypeSpecificUI
@@ -7,7 +7,7 @@ import com.intellij.ui.dsl.builder.Row
import com.intellij.ui.dsl.builder.bindSelected
import com.jetbrains.python.PyBundle
object PyV3EmptyProjectUI : PyV3ProjectTypeSpecificUI<PyV3EmptyProjectSettings> {
internal object PyV3EmptyProjectUI : PyV3ProjectTypeSpecificUI<PyV3EmptyProjectSettings> {
override fun configureUpperPanel(settings: PyV3EmptyProjectSettings, checkBoxRow: Row, belowCheckBoxes: Panel) {
checkBoxRow.checkBox(PyBundle.message("new.project.welcome")).bindSelected(settings::generateWelcomeScript)
}
@@ -3,6 +3,6 @@
* Project without any framework
*/
@ApiStatus.Internal
package com.intellij.pycharm.community.ide.impl.newProject.impl.emptyProject;
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl.emptyProject;
import org.jetbrains.annotations.ApiStatus;
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
@ApiStatus.Internal
package com.intellij.pycharm.community.ide.impl.newProject.impl;
package com.intellij.pycharm.community.ide.impl.newProjectWizard.impl;
import org.jetbrains.annotations.ApiStatus;
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.welcome
package com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome
import com.intellij.execution.RunManager
import com.intellij.execution.actions.ConfigurationContext
@@ -35,12 +35,12 @@ import com.intellij.platform.DirectoryProjectConfigurator
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.ProjectType
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.ProjectViewPoint
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.ProjectViewResult
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.RunConfigurationResult
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.ScriptResult
import com.intellij.pycharm.community.ide.impl.newProject.welcome.PyWelcomeCollector.logWelcomeRunConfiguration
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.ProjectType
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.ProjectViewPoint
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.ProjectViewResult
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.RunConfigurationResult
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.ScriptResult
import com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome.PyWelcomeCollector.logWelcomeRunConfiguration
import com.intellij.util.concurrency.annotations.RequiresWriteLock
import com.intellij.xdebugger.XDebuggerUtil
import com.jetbrains.python.PythonPluginDisposable
@@ -74,7 +74,7 @@ internal class PyWelcomeConfigurator : DirectoryProjectConfigurator {
}
}
object PyWelcome {
internal object PyWelcome {
private val LOG = Logger.getInstance(PyWelcome::class.java)
@CalledInAny
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.welcome;
package com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome;
import com.intellij.DynamicBundle;
import org.jetbrains.annotations.Nls;
@@ -7,7 +7,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.PropertyKey;
public final class PyWelcomeBundle {
final class PyWelcomeBundle {
private static final @NonNls String BUNDLE = "messages.PyWelcomeBundle";
private static final DynamicBundle INSTANCE = new DynamicBundle(PyWelcomeBundle.class, BUNDLE);
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.welcome
package com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome
import com.intellij.internal.statistic.eventLog.EventLogGroup
import com.intellij.internal.statistic.eventLog.events.EventFields
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.pycharm.community.ide.impl.newProject.welcome
package com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.PersistentStateComponent
@@ -8,7 +8,7 @@ import com.intellij.openapi.components.Storage
import com.intellij.util.xmlb.XmlSerializerUtil
@State(name = "PyWelcomeSettings", storages = [Storage("pyWelcome.xml")], reportStatistic = true)
class PyWelcomeSettings : PersistentStateComponent<PyWelcomeSettings.State> {
internal class PyWelcomeSettings : PersistentStateComponent<PyWelcomeSettings.State> {
companion object {
@JvmStatic
val instance: PyWelcomeSettings
@@ -0,0 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* Various tools to create a welcome script
*/
package com.intellij.pycharm.community.ide.impl.newProjectWizard.welcome;
@@ -506,7 +506,7 @@ The Python plug-in provides smart editing for Python scripts. The feature set of
<statistics.projectUsagesCollector implementation="com.jetbrains.python.statistics.PyCompatibilityInspectionCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.namespacePackages.PyNamespacePackagesStatisticsCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.codeInsight.codeVision.PyCodeVisionUsageCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.newProject.collector.PythonNewProjectWizardCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.newProjectWizard.collector.PythonNewProjectWizardCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.sdk.add.collector.PythonNewInterpreterAddedCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.run.runAnything.PyRunAnythingCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.debugger.statistics.PyDataViewerCollector"/>
@@ -580,7 +580,7 @@ The Python plug-in provides smart editing for Python scripts. The feature set of
icon="com.jetbrains.python.icons.PythonIcons.Python.PythonPackages"
factoryClass="com.jetbrains.python.packaging.toolwindow.PyPackagesToolWindowFactory"/>
<toolWindowExtractorMode id="Python Packages" mode="mirror"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.sdk.add.PyAddNewEnvCollector"/>
<statistics.counterUsagesCollector implementationClass="com.jetbrains.python.sdk.add.v1.PyAddNewEnvCollector"/>
<statistics.counterUsagesCollector
implementationClass="com.jetbrains.python.packaging.statistics.PythonPackagesToolwindowStatisticsCollector"/>
@@ -4,7 +4,6 @@ package com.intellij.python.featuresTrainer.ift
import com.intellij.ide.impl.OpenProjectTask
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.diagnostic.getOrLogException
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManager
@@ -23,8 +23,8 @@ import com.jetbrains.python.newProject.steps.ProjectSpecificSettingsStep
import com.jetbrains.python.newProject.steps.PyAddExistingSdkPanel
import com.jetbrains.python.sdk.PySdkProvider
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.add.PyAddNewCondaEnvPanel
import com.jetbrains.python.sdk.add.PyAddNewVirtualEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewCondaEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewVirtualEnvPanel
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.configurePythonSdk
import java.nio.file.Path
@@ -21,8 +21,8 @@ import com.intellij.platform.DirectoryProjectGeneratorBase;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.PyPsiPackageUtil;
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo;
import com.jetbrains.python.newProject.collector.PythonNewProjectWizardCollector;
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo;
import com.jetbrains.python.newProjectWizard.collector.PythonNewProjectWizardCollector;
import com.jetbrains.python.packaging.PyPackage;
import com.jetbrains.python.packaging.PyPackageManager;
import com.jetbrains.python.packaging.PyPackageUtil;
@@ -0,0 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* Legacy (V1) new project API. Only used by DS (will be migrated soon), external plugins and python plugin.
* @deprecated Use {@link com.jetbrains.python.newProjectWizard}
*/
@Deprecated
package com.jetbrains.python.newProject;
@@ -14,7 +14,6 @@ import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.util.text.TextWithMnemonic;
@@ -29,10 +28,9 @@ import com.jetbrains.python.configuration.PyConfigurableInterpreterList;
import com.jetbrains.python.newProject.PyFrameworkProjectGenerator;
import com.jetbrains.python.newProject.PyNewProjectSettings;
import com.jetbrains.python.newProject.PythonProjectGenerator;
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo;
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo;
import com.jetbrains.python.packaging.PyPackage;
import com.jetbrains.python.packaging.PyPackageUtil;
import com.jetbrains.python.psi.PyUtil;
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory;
import com.jetbrains.python.sdk.*;
import com.jetbrains.python.sdk.add.PyAddSdkGroupPanel;
@@ -11,18 +11,15 @@ import com.intellij.openapi.ui.ComboBox
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.openapi.ui.ValidationInfo
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.util.SystemInfo
import com.intellij.openapi.util.component1
import com.intellij.openapi.util.component2
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtil
import com.intellij.util.PathMappingSettings
import com.intellij.util.ui.FormBuilder
import com.intellij.util.ui.UIUtil
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.Result
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.remote.PyProjectSynchronizer
import com.jetbrains.python.remote.PyProjectSynchronizerProvider
import com.jetbrains.python.remote.PythonSshInterpreterManager
@@ -39,7 +36,7 @@ import java.awt.Component
import javax.swing.JComboBox
import javax.swing.JComponent
class PyAddExistingSdkPanel(project: Project?,
internal class PyAddExistingSdkPanel(project: Project?,
module: Module?,
existingSdks: List<Sdk>,
newProjectPath: String?,
@@ -8,12 +8,12 @@ import com.intellij.openapi.util.UserDataHolder
import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.ui.SimpleListCellRenderer
import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.PySdkProvider
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.add.PyAddNewCondaEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewCondaEnvPanel
import com.jetbrains.python.sdk.add.PyAddNewEnvPanel
import com.jetbrains.python.sdk.add.PyAddNewVirtualEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewVirtualEnvPanel
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
@@ -21,7 +21,7 @@ import java.awt.BorderLayout
import java.awt.event.ItemEvent
import javax.swing.JComboBox
class PyAddNewEnvironmentPanel internal constructor(existingSdks: List<Sdk>, newProjectPath: String?, preferredInterpreterType: PythonInterpreterSelectionMode? = null) : PyAddSdkPanel() {
internal class PyAddNewEnvironmentPanel internal constructor(existingSdks: List<Sdk>, newProjectPath: String?, preferredInterpreterType: PythonInterpreterSelectionMode? = null) : PyAddSdkPanel() {
@Deprecated(message = "Use constructor without ignored")
constructor(existingSdks: List<Sdk>, newProjectPath: String?, @Suppress("UNUSED_PARAMETER") ignored: String?) : this(existingSdks, newProjectPath, preferredInterpreterType = null)
@@ -29,8 +29,8 @@ import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.PyNewProjectSettings
import com.jetbrains.python.newProject.PythonProjectGenerator
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProject.promotion.PromoProjectGenerator
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.promotion.PromoProjectGenerator
import com.jetbrains.python.sdk.PyLazySdk
import com.jetbrains.python.sdk.add.v2.PythonAddNewEnvironmentPanel
import com.jetbrains.python.util.ShowingMessageErrorSync
@@ -0,0 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* Legacy (V1) new project API. Only used by DS (will be migrated soon), external plugins and python plugin.
* @deprecated Use {@link com.jetbrains.python.newProjectWizard}
*/
@Deprecated
package com.jetbrains.python.newProject.steps;
@@ -8,10 +8,10 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.ide.progress.withBackgroundProgress
import com.jetbrains.python.PyBundle
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProject.collector.PythonNewProjectWizardCollector.logPythonNewProjectGenerated
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.PythonNewProjectWizardCollector.logPythonNewProjectGenerated
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.add.PySdkCreator
import com.jetbrains.python.sdk.add.v2.PySdkCreator
import com.jetbrains.python.sdk.pythonSdk
import com.jetbrains.python.sdk.setAssociationToModule
import com.jetbrains.python.statistics.version
@@ -1,5 +1,5 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.newProject.collector
package com.jetbrains.python.newProjectWizard.collector
import com.intellij.internal.statistic.eventLog.EventLogGroup
import com.intellij.internal.statistic.eventLog.events.EventFields
@@ -9,7 +9,7 @@ import com.jetbrains.python.newProjectWizard.ProjectPathFlow
import com.jetbrains.python.newProjectWizard.PyV3BaseProjectSettings
import com.jetbrains.python.newProjectWizard.PyV3ProjectTypeSpecificSettings
import com.jetbrains.python.newProjectWizard.PyV3ProjectTypeSpecificUI
import com.jetbrains.python.sdk.add.PySdkCreator
import com.jetbrains.python.sdk.add.v2.PySdkCreator
import com.jetbrains.python.sdk.add.v2.PythonAddNewEnvironmentPanel
import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode
import com.jetbrains.python.util.ShowingMessageErrorSync
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.newProject.promotion
package com.jetbrains.python.newProjectWizard.promotion
import com.intellij.facet.ui.ValidationResult
import com.intellij.openapi.module.Module
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.newProject.promotion
package com.jetbrains.python.newProjectWizard.promotion
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase
@@ -3,6 +3,6 @@
* For promotions: things that aren't available in community.
*/
@ApiStatus.Internal
package com.jetbrains.python.newProject.promotion;
package com.jetbrains.python.newProjectWizard.promotion;
import org.jetbrains.annotations.ApiStatus;
@@ -16,7 +16,7 @@ import com.jetbrains.python.packaging.PyPackageVersionComparator
import com.jetbrains.python.packaging.cache.PythonPackageCache
import com.jetbrains.python.packaging.common.PythonRankingAwarePackageNameComparator
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.sdk.add.target.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
import com.jetbrains.python.sdk.flavors.conda.PyCondaFlavorData
@@ -17,7 +17,7 @@ import com.intellij.ui.dsl.builder.Panel
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase
import com.jetbrains.python.run.target.HelpersAwareLocalTargetEnvironmentRequest
import com.jetbrains.python.run.target.HelpersAwareTargetEnvironmentRequest
import com.jetbrains.python.sdk.add.target.TargetPanelExtension
import com.jetbrains.python.sdk.add.v1.TargetPanelExtension
import com.jetbrains.python.target.PyTargetAwareAdditionalData
import com.jetbrains.python.target.targetWithVfs.TargetWithMappedLocalVfs
import org.jetbrains.annotations.ApiStatus
@@ -52,7 +52,7 @@ import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.remote.PyRemoteSdkAdditionalData
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.sdk.add.target.createDetectedSdk
import com.jetbrains.python.sdk.add.v1.createDetectedSdk
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor
@@ -44,7 +44,7 @@ import com.jetbrains.python.remote.PyRemoteInterpreterUtil;
import com.jetbrains.python.remote.PyRemoteSdkAdditionalDataBase;
import com.jetbrains.python.remote.PythonRemoteInterpreterManager;
import com.jetbrains.python.sdk.add.PyAddSdkDialog;
import com.jetbrains.python.sdk.add.target.PyDetectedSdkAdditionalData;
import com.jetbrains.python.sdk.add.v1.PyDetectedSdkAdditionalData;
import com.jetbrains.python.sdk.flavors.CPythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import com.jetbrains.python.target.PyInterpreterVersionUtil;
@@ -0,0 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.openapi.projectRoots.Sdk
class ExistingPySdkComboBoxItem(val sdk: Sdk) : PySdkComboBoxItem()
@@ -0,0 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
class NewPySdkComboBoxItem(val title: String) : PySdkComboBoxItem()
@@ -1,4 +1,4 @@
// Copyright 2000-2017 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.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode
@@ -1,4 +1,4 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.CommonBundle
@@ -25,9 +25,23 @@ import com.intellij.util.ui.JBUI
import com.jetbrains.python.PyBundle
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.packaging.PyExecutionException
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction.*
import com.jetbrains.python.sdk.PreferredSdkComparator
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.add.v1.CreateSdkInterrupted
import com.jetbrains.python.sdk.add.v1.PyAddExistingCondaEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddExistingVirtualEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewCondaEnvPanel
import com.jetbrains.python.sdk.add.v1.PyAddNewVirtualEnvPanel
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.v1.PyAddSystemWideInterpreterPanel
import com.jetbrains.python.sdk.add.v1.doCreateSouthPanel
import com.jetbrains.python.sdk.add.v1.showProcessExecutionErrorDialog
import com.jetbrains.python.sdk.add.v1.swipe
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.jetbrains.python.sdk.detectVirtualEnvs
import com.jetbrains.python.sdk.isAssociatedWithModule
import com.jetbrains.python.sdk.sdkSeemsValid
import java.awt.CardLayout
import java.awt.event.ActionEvent
import java.io.IOException
@@ -43,9 +57,11 @@ import javax.swing.JPanel
* Use [show] to instantiate and show the dialog.
*
*/
class PyAddSdkDialog private constructor(private val project: Project?,
private val module: Module?,
private val existingSdks: List<Sdk>) : DialogWrapper(project) {
class PyAddSdkDialog private constructor(
private val project: Project?,
private val module: Module?,
private val existingSdks: List<Sdk>,
) : DialogWrapper(project) {
/**
* This is the main panel that supplies sliding effect for the wizard states.
*/
@@ -78,7 +94,7 @@ class PyAddSdkDialog private constructor(private val project: Project?,
val venvPanel = createVirtualEnvPanel(project, module, sdks)
val condaPanel = createAnacondaPanel(project, module)
val systemWidePanel = PyAddSystemWideInterpreterPanel(project, module, existingSdks, context)
return if (PyCondaSdkCustomizer.instance.preferCondaEnvironments) {
return if (PyCondaSdkCustomizer.Companion.instance.preferCondaEnvironments) {
listOf(condaPanel, venvPanel, systemWidePanel)
}
else {
@@ -120,8 +136,8 @@ class PyAddSdkDialog private constructor(private val project: Project?,
private val nextAction: Action = object : DialogWrapperAction(PyBundle.message("python.sdk.next")) {
override fun doAction(e: ActionEvent) {
selectedPanel?.let {
if (it.actions.containsKey(NEXT)) onNext()
else if (it.actions.containsKey(FINISH)) {
if (it.actions.containsKey(PyAddSdkDialogFlowAction.NEXT)) onNext()
else if (it.actions.containsKey(PyAddSdkDialogFlowAction.FINISH)) {
onFinish()
}
}
@@ -155,7 +171,7 @@ class PyAddSdkDialog private constructor(private val project: Project?,
panel.addStateListener(object : PyAddSdkStateListener {
override fun onComponentChanged() {
show(mainPanel, panel.component)
com.jetbrains.python.sdk.add.v1.show(mainPanel, panel.component)
selectedPanel?.let { updateWizardActionButtons(it) }
}
@@ -183,7 +199,7 @@ class PyAddSdkDialog private constructor(private val project: Project?,
cardLayout.show(cardPanel, selectedValue.panelName)
southPanel?.let {
if (selectedValue.actions.containsKey(NEXT)) {
if (selectedValue.actions.containsKey(PyAddSdkDialogFlowAction.NEXT)) {
navigationPanelCardLayout?.show(it, WIZARD_CARD_PANE)
rootPane.defaultButton = nextButton.value
@@ -206,9 +222,11 @@ class PyAddSdkDialog private constructor(private val project: Project?,
}
}
private fun createVirtualEnvPanel(project: Project?,
module: Module?,
existingSdks: List<Sdk>): PyAddSdkPanel {
private fun createVirtualEnvPanel(
project: Project?,
module: Module?,
existingSdks: List<Sdk>,
): PyAddSdkPanel {
val newVirtualEnvPanel = when {
allowCreatingNewEnvironments(project) -> PyAddNewVirtualEnvPanel(project, module, existingSdks, null, context)
else -> null
@@ -234,7 +252,7 @@ class PyAddSdkDialog private constructor(private val project: Project?,
val panels = listOf(newCondaEnvPanel,
PyAddExistingCondaEnvPanel(project, existingSdks, null))
.filterNotNull()
val defaultPanel = if (PyCondaSdkCustomizer.instance.preferExistingEnvironments) panels[1] else panels[0]
val defaultPanel = if (PyCondaSdkCustomizer.Companion.instance.preferExistingEnvironments) panels[1] else panels[0]
return PyAddSdkGroupPanel(PyBundle.messagePointer("python.add.sdk.panel.name.conda.environment"),
PythonIcons.Python.Anaconda, panels, defaultPanel)
}
@@ -261,7 +279,7 @@ class PyAddSdkDialog private constructor(private val project: Project?,
it.previous()
// sliding effect
if (it.actions.containsKey(PREVIOUS)) {
if (it.actions.containsKey(PyAddSdkDialogFlowAction.PREVIOUS)) {
val stepContent = it.component
val stepContentName = stepContent.hashCode().toString()
@@ -312,9 +330,9 @@ class PyAddSdkDialog private constructor(private val project: Project?,
it.actions.forEach { (action, isEnabled) ->
val actionButton = when (action) {
PREVIOUS -> previousButton.value
NEXT -> nextButton.value.apply { text = PyBundle.message("python.sdk.next") }
FINISH -> nextButton.value.apply { text = PyBundle.message("python.sdk.finish") }
PyAddSdkDialogFlowAction.PREVIOUS -> previousButton.value
PyAddSdkDialogFlowAction.NEXT -> nextButton.value.apply { text = PyBundle.message("python.sdk.next") }
PyAddSdkDialogFlowAction.FINISH -> nextButton.value.apply { text = PyBundle.message("python.sdk.finish") }
else -> null
}
actionButton?.isEnabled = isEnabled
@@ -347,10 +365,12 @@ class PyAddSdkDialog private constructor(private val project: Project?,
* and Docker Compose types throws [NoClassDefFoundError] exception when
* `org.jetbrains.plugins.remote-run` plugin is disabled.
*/
private fun PyAddSdkProvider.safeCreateView(project: Project?,
module: Module?,
existingSdks: List<Sdk>,
context: UserDataHolder): PyAddSdkView? {
private fun PyAddSdkProvider.safeCreateView(
project: Project?,
module: Module?,
existingSdks: List<Sdk>,
context: UserDataHolder,
): PyAddSdkView? {
try {
return createView(project, module, null, existingSdks, context)
}
@@ -360,6 +380,4 @@ class PyAddSdkDialog private constructor(private val project: Project?,
}
}
}
}
class CreateSdkInterrupted : Exception()
}
@@ -1,4 +1,4 @@
// 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.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
enum class PyAddSdkDialogFlowAction {
@@ -1,18 +1,4 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.openapi.projectRoots.Sdk
@@ -21,16 +7,21 @@ import com.intellij.ui.components.JBRadioButton
import com.intellij.util.ui.FormBuilder
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import org.jetbrains.annotations.Nls
import java.awt.BorderLayout
import java.awt.Container
import java.util.function.Supplier
import javax.swing.ButtonGroup
import javax.swing.Icon
import javax.swing.JPanel
import kotlin.collections.iterator
class PyAddSdkGroupPanel(private val nameGetter: java.util.function.Supplier<@Nls String>,
class PyAddSdkGroupPanel(private val nameGetter: Supplier<@Nls String>,
panelIcon: Icon,
val panels: List<PyAddSdkPanel>,
defaultPanel: PyAddSdkPanel) : PyAddSdkPanel() {
defaultPanel: PyAddSdkPanel
) : PyAddSdkPanel() {
override val panelName: String get() = nameGetter.get() // NON-NLS
override val icon: Icon = panelIcon
var selectedPanel: PyAddSdkPanel = defaultPanel
@@ -15,16 +15,19 @@ import com.intellij.openapi.util.SystemInfo
import com.intellij.openapi.util.UserDataHolder
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProject.steps.PyAddNewEnvironmentPanel
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.pathValidation.PlatformAndRoot
import com.jetbrains.python.pathValidation.ValidationRequest
import com.jetbrains.python.pathValidation.validateEmptyDir
import com.jetbrains.python.psi.icons.PythonPsiApiIcons
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction.OK
import com.jetbrains.python.sdk.PyDetectedSdk
import com.jetbrains.python.sdk.PySdkToInstall
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction
import com.jetbrains.python.sdk.configuration.findPreferredVirtualEnvBaseSdk
import com.jetbrains.python.sdk.findBaseSdks
import com.jetbrains.python.sdk.flavors.MacPythonSdkFlavor
import com.jetbrains.python.sdk.getSdksToInstall
import com.jetbrains.python.ui.pyModalBlocking
import java.awt.Component
import javax.swing.Icon
@@ -33,7 +36,7 @@ import javax.swing.JPanel
abstract class PyAddSdkPanel : JPanel(), PyAddSdkView {
override val actions: Map<PyAddSdkDialogFlowAction, Boolean>
get() = mapOf(OK.enabled())
get() = mapOf(PyAddSdkDialogFlowAction.OK.enabled())
override val component: Component
get() = this
@@ -165,7 +168,7 @@ private fun PySdkPathChoosingComboBox.removeAllItems() {
/**
* Obtains a list of sdk to be used as a base for a virtual environment on a pool,
* then fills the [sdkComboBox] on the EDT and chooses [PySdkSettings.preferredVirtualEnvBaseSdk] or prepends it.
* then fills the [sdkComboBox] on the EDT and chooses [com.jetbrains.python.sdk.PySdkSettings.preferredVirtualEnvBaseSdk] or prepends it.
*/
fun addBaseInterpretersAsync(sdkComboBox: PySdkPathChoosingComboBox,
existingSdks: List<Sdk>,
@@ -188,4 +191,4 @@ fun addBaseInterpretersAsync(sdkComboBox: PySdkPathChoosingComboBox,
callback()
}
)
}
}
@@ -1,4 +1,4 @@
// 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.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.openapi.extensions.ExtensionPointName
@@ -1,4 +1,4 @@
// 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.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
interface PyAddSdkStateListener {
@@ -1,9 +1,10 @@
// 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.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.ui.ValidationInfo
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction
import org.jetbrains.annotations.Nls
import java.awt.Component
import javax.swing.Icon
@@ -1,12 +1,4 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
import com.intellij.openapi.projectRoots.Sdk
sealed class PySdkComboBoxItem
class NewPySdkComboBoxItem(val title: String) : PySdkComboBoxItem()
class ExistingPySdkComboBoxItem(val sdk: Sdk) : PySdkComboBoxItem()
fun Sdk.asComboBoxItem() = ExistingPySdkComboBoxItem(this)
sealed class PySdkComboBoxItem
@@ -30,7 +30,9 @@ import com.intellij.ui.components.fields.ExtendableTextField
import com.intellij.util.PathUtil
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.add.target.createDetectedSdk
import com.jetbrains.python.sdk.add.v1.PySdkListCellRendererExt
import com.jetbrains.python.sdk.add.v1.asComboBoxItem
import com.jetbrains.python.sdk.add.v1.createDetectedSdk
import com.jetbrains.python.ui.targetPathEditor.ManualPathEntryDialog
import java.awt.event.ActionListener
import java.util.function.Supplier
@@ -0,0 +1,8 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* Tools to add python sdk.
* {@link com.jetbrains.python.sdk.add.v2} is recommended.
* <p>
* Various classes directly in the package are only here because of third party plugins
*/
package com.jetbrains.python.sdk.add;
@@ -1,8 +0,0 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.add.target
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
val TargetEnvironmentConfiguration?.isMutableTarget: Boolean
get() = this?.let { PythonInterpreterTargetEnvironmentFactory.isMutable(it) } ?: true
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.BrowsableTargetEnvironmentType
import com.intellij.execution.target.TargetBrowserHints
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target.conda
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.FullPathOnTarget
import com.intellij.execution.target.LanguageRuntimeType
@@ -17,7 +17,13 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.util.progress.RawProgressReporter
import com.jetbrains.python.PyBundle
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.sdk.add.target.isMutableTarget
import com.jetbrains.python.sdk.conda.IntrospectableCommandExecutor
import com.jetbrains.python.sdk.conda.TargetCommandExecutor
import com.jetbrains.python.sdk.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.conda.condaSupportedLanguages
import com.jetbrains.python.sdk.conda.createCondaSdkAlongWithNewEnv
import com.jetbrains.python.sdk.conda.createCondaSdkFromExistingEnv
import com.jetbrains.python.sdk.conda.suggestCondaPath
import com.jetbrains.python.sdk.flavors.conda.NewCondaEnvRequest
import com.jetbrains.python.sdk.flavors.conda.PyCondaCommand
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target.conda
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetBrowserHints
import com.intellij.openapi.Disposable
@@ -21,8 +21,6 @@ import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory.Compan
import com.jetbrains.python.sdk.add.PyAddSdkDialogFlowAction
import com.jetbrains.python.sdk.add.PyAddSdkStateListener
import com.jetbrains.python.sdk.add.PyAddSdkView
import com.jetbrains.python.sdk.add.target.TargetPanelExtension
import com.jetbrains.python.sdk.add.target.addBrowseFolderListener
import kotlinx.coroutines.Dispatchers
import org.jetbrains.annotations.Nls
import java.awt.Component
@@ -33,7 +31,7 @@ import javax.swing.JOptionPane.ERROR_MESSAGE
/**
* View for adding conda interpreter backed by [model]
*/
class PyAddCondaPanelView(private val model: PyAddCondaPanelModel) : PyAddSdkView, Disposable {
internal class PyAddCondaPanelView(private val model: PyAddCondaPanelModel) : PyAddSdkView, Disposable {
override val panelName: String get() = PyBundle.message("python.add.sdk.panel.name.conda.environment")
override val icon: Icon = PythonIcons.Python.Anaconda
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.diagnostic.getOrLogException
import com.intellij.openapi.diagnostic.thisLogger
@@ -15,13 +15,15 @@ import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.packaging.PyCondaPackageService
import com.jetbrains.python.sdk.PyDetectedSdk
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.jetbrains.python.sdk.setupAssociated
import java.awt.BorderLayout
import java.awt.event.ItemEvent
import javax.swing.Icon
open class PyAddExistingCondaEnvPanel(
internal open class PyAddExistingCondaEnvPanel(
private val project: Project?,
private val existingSdks: List<Sdk>,
override var newProjectPath: String?,
@@ -30,7 +32,7 @@ open class PyAddExistingCondaEnvPanel(
override val icon: Icon = PythonIcons.Python.Anaconda
protected val sdkComboBox = PySdkPathChoosingComboBox()
private val condaPathField = TextFieldWithBrowseButton().apply {
val path = PyCondaPackageService.getCondaExecutable(null)
val path = PyCondaPackageService.Companion.getCondaExecutable(null)
if (path != null) {
text = path
}
@@ -43,12 +45,12 @@ open class PyAddExistingCondaEnvPanel(
init {
sdkComboBox.childComponent.addItemListener {
if (it.stateChange == ItemEvent.SELECTED) {
val respectiveCondaExecutable = PyCondaPackageService.getCondaExecutable(sdkComboBox.selectedSdk.homePath)
val respectiveCondaExecutable = PyCondaPackageService.Companion.getCondaExecutable(sdkComboBox.selectedSdk.homePath)
condaPathField.text = respectiveCondaExecutable.orEmpty()
}
}
if (PyCondaSdkCustomizer.instance.sharedEnvironmentsByDefault) {
if (PyCondaSdkCustomizer.Companion.instance.sharedEnvironmentsByDefault) {
makeSharedField.isSelected = true
}
@@ -74,11 +76,11 @@ open class PyAddExistingCondaEnvPanel(
override fun getOrCreateSdk(): Sdk? {
val sdk = sdkComboBox.selectedSdk
PyCondaPackageService.onCondaEnvCreated(condaPathField.text)
PyCondaPackageService.Companion.onCondaEnvCreated(condaPathField.text)
return when (sdk) {
is PyDetectedSdk -> sdk.setupAssociated(existingSdks, newProjectPath ?: project?.basePath, !makeSharedField.isSelected)
.getOrLogException(thisLogger())
else -> sdk
}
}
}
}
@@ -1,19 +1,5 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python.sdk.add
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.diagnostic.getOrLogException
import com.intellij.openapi.module.Module
@@ -27,6 +13,9 @@ import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.sdk.*
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.addInterpretersAsync
import java.awt.BorderLayout
import javax.swing.Icon
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.module.Module
@@ -10,7 +10,8 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.add.PyAddNewEnvCollector.InputData
import com.jetbrains.python.sdk.add.v1.PyAddNewEnvCollector
import com.jetbrains.python.sdk.add.v1.PyAddNewEnvCollector.InputData
import org.jetbrains.annotations.SystemDependent
import java.awt.BorderLayout
import java.nio.file.Path
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.ExecutionException
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
@@ -20,11 +20,12 @@ import com.intellij.util.SystemProperties
import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.packaging.PyCondaPackageManagerImpl
import com.jetbrains.python.packaging.PyCondaPackageService
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.target.conda.condaSupportedLanguages
import com.jetbrains.python.sdk.add.PyAddNewEnvPanel
import com.jetbrains.python.sdk.conda.condaSupportedLanguages
import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.jetbrains.python.statistics.InterpreterTarget
@@ -1,5 +1,5 @@
// Copyright 2000-2020 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.add
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.internal.statistic.eventLog.EventLogGroup
import com.intellij.internal.statistic.eventLog.events.EventFields
@@ -1,5 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.fileTypes.PlainTextFileType
@@ -18,17 +17,23 @@ import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.PythonFileType
import com.jetbrains.python.pathValidation.PlatformAndRoot
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.add.PyAddNewEnvCollector.InputData
import com.jetbrains.python.sdk.add.PyAddNewEnvCollector.RequirementsTxtOrSetupPyData
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.v1.PyAddNewEnvCollector.InputData
import com.jetbrains.python.sdk.add.v1.PyAddNewEnvCollector.RequirementsTxtOrSetupPyData
import com.jetbrains.python.sdk.add.PyAddSdkPanel.Companion.validateSdkComboBox
import com.jetbrains.python.sdk.add.addBaseInterpretersAsync
import com.jetbrains.python.sdk.basePath
import org.jetbrains.annotations.SystemDependent
import org.jetbrains.annotations.SystemIndependent
import java.awt.BorderLayout
import javax.swing.JPanel
class PyAddNewVirtualEnvFromFilePanel(private val module: Module,
existingSdks: List<Sdk>,
suggestedRequirementsTxtOrSetupPy: VirtualFile? = null) : JPanel() {
class PyAddNewVirtualEnvFromFilePanel(
private val module: Module,
existingSdks: List<Sdk>,
suggestedRequirementsTxtOrSetupPy: VirtualFile? = null,
) : JPanel() {
val envData: Data
get() = Data(pathField.text, baseSdkField.selectedSdk, requirementsTxtOrSetupPyField.text)
@@ -45,7 +50,7 @@ class PyAddNewVirtualEnvFromFilePanel(private val module: Module,
init {
pathField.apply {
text = FileUtil.toSystemDependentName(PySdkSettings.instance.getPreferredVirtualEnvBasePath(projectBasePath))
text = FileUtil.toSystemDependentName(PySdkSettings.Companion.instance.getPreferredVirtualEnvBasePath(projectBasePath))
addBrowseFolderListener(module.project, FileChooserDescriptorFactory.createSingleFolderDescriptor()
.withTitle(PySdkBundle.message("python.venv.location.chooser")))
@@ -76,8 +81,8 @@ class PyAddNewVirtualEnvFromFilePanel(private val module: Module,
}
fun validateAll(@NlsContexts.Button defaultButtonName: String): List<ValidationInfo> =
listOfNotNull(PyAddSdkPanel.validateEnvironmentDirectoryLocation(pathField, PlatformAndRoot.local),
PyAddSdkPanel.validateSdkComboBox(baseSdkField, defaultButtonName))
listOfNotNull(PyAddSdkPanel.Companion.validateEnvironmentDirectoryLocation(pathField, PlatformAndRoot.Companion.local),
validateSdkComboBox(baseSdkField, defaultButtonName))
/**
* Must be called if the input is confirmed and the current instance will not be used anymore
@@ -156,6 +161,6 @@ class PyAddNewVirtualEnvFromFilePanel(private val module: Module,
data class Data(
val path: @NlsSafe @SystemDependent String,
val baseSdk: Sdk?,
val requirementsTxtOrSetupPyPath: @NlsSafe @SystemDependent String
val requirementsTxtOrSetupPyPath: @NlsSafe @SystemDependent String,
)
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.module.Module
@@ -15,9 +15,12 @@ import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.pathValidation.PlatformAndRoot
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.add.PyAddNewEnvPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.addBaseInterpretersAsync
import com.jetbrains.python.sdk.basePath
import com.jetbrains.python.sdk.configuration.createVirtualEnvSynchronously
import com.jetbrains.python.statistics.InterpreterTarget
@@ -0,0 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
class CreateSdkInterrupted : Exception()
@@ -1,5 +1,5 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.add.target
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.intellij.openapi.module.Module
@@ -15,7 +15,7 @@ import java.util.function.Supplier
/**
* Contains common logic for creating target-based Python SDKs.
*/
abstract class PyAddSdkPanelBase(protected val project: Project?,
internal abstract class PyAddSdkPanelBase(protected val project: Project?,
protected val module: Module?,
private val targetSupplier: Supplier<TargetEnvironmentConfiguration>?)
: PyAddSdkPanel() {
@@ -35,7 +35,7 @@ abstract class PyAddSdkPanelBase(protected val project: Project?,
* Note: local target is mutable.
*/
protected val isMutableTarget: Boolean
get() = targetEnvironmentConfiguration?.let { PythonInterpreterTargetEnvironmentFactory.isMutable(it) } ?: true
get() = targetEnvironmentConfiguration?.let { PythonInterpreterTargetEnvironmentFactory.Companion.isMutable(it) } ?: true
companion object {
internal val virtualEnvSdkFlavor: VirtualEnvSdkFlavor
@@ -1,19 +1,5 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python.sdk.add
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.intellij.openapi.diagnostic.getOrLogException
@@ -30,12 +16,21 @@ import com.intellij.ui.dsl.builder.panel
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory.Companion.extendWithTargetSpecificFields
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.target.TargetPanelExtension
import com.jetbrains.python.sdk.add.target.createDetectedSdk
import com.jetbrains.python.sdk.LOGGER
import com.jetbrains.python.sdk.PyDetectedSdk
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.addInterpretersAsync
import com.jetbrains.python.sdk.adminPermissionsNeeded
import com.jetbrains.python.sdk.configuration.createSdkForTarget
import com.jetbrains.python.sdk.detectSystemWideSdks
import com.jetbrains.python.sdk.filterSystemWideSdks
import com.jetbrains.python.sdk.getSdksToInstall
import com.jetbrains.python.sdk.installSdkIfNeeded
import com.jetbrains.python.sdk.setup
import com.jetbrains.python.target.PythonLanguageRuntimeConfiguration
import java.awt.BorderLayout
import java.awt.Container
import java.util.function.Supplier
open class PyAddSystemWideInterpreterPanel(private val _project: Project?,
@@ -131,4 +126,4 @@ open class PyAddSystemWideInterpreterPanel(private val _project: Project?,
override fun addChangeListener(listener: Runnable) {
sdkComboBox.childComponent.addItemListener { listener.run() }
}
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.add.target
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.intellij.openapi.module.Module
@@ -73,5 +73,4 @@ class PyAddTargetBasedSdkDialog private constructor(private val project: Project
sdkAddedCallback.accept(sdk)
}
}
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. 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.add.target
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.CommonBundle
import com.intellij.execution.target.IncompleteTargetEnvironmentConfiguration
@@ -28,12 +28,7 @@ import com.intellij.util.ui.UIUtil
import com.jetbrains.python.packaging.PyExecutionException
import com.jetbrains.python.sdk.PreferredSdkComparator
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.add.CreateSdkInterrupted
import com.jetbrains.python.sdk.add.PyAddSdkView
import com.jetbrains.python.sdk.add.PyAddSystemWideInterpreterPanel
import com.jetbrains.python.sdk.add.showProcessExecutionErrorDialog
import com.jetbrains.python.sdk.add.target.conda.PyAddCondaPanelModel
import com.jetbrains.python.sdk.add.target.conda.PyAddCondaPanelView
import com.jetbrains.python.sdk.conda.PyCondaSdkCustomizer
import com.jetbrains.python.sdk.pipenv.PyAddPipEnvPanel
import com.jetbrains.python.sdk.poetry.ui.createPoetryPanel
@@ -48,7 +43,7 @@ import javax.swing.JPanel
/**
* The panel that is supposed to be used both for local and non-local target-based versions of "New Interpreter" dialog.
*/
class PyAddTargetBasedSdkPanel(private val project: Project?,
internal class PyAddTargetBasedSdkPanel(private val project: Project?,
private val module: Module?,
private val existingSdks: List<Sdk>,
private val targetSupplier: Supplier<TargetEnvironmentConfiguration>?,
@@ -96,7 +91,7 @@ class PyAddTargetBasedSdkPanel(private val project: Project?,
val newProjectPath = null
val pipEnvPanel = createPipEnvPanel(newProjectPath)
val poetryPanel = createPoetryPanel(project, module, existingSdks, newProjectPath, context)
if (PyCondaSdkCustomizer.instance.preferCondaEnvironments) {
if (PyCondaSdkCustomizer.Companion.instance.preferCondaEnvironments) {
listOf(condaPanel, venvPanel, systemWidePanel, pipEnvPanel, poetryPanel) to condaPanel
}
else {
@@ -109,7 +104,7 @@ class PyAddTargetBasedSdkPanel(private val project: Project?,
// Enable Conda for SSH in DataSpell while keeping it disabled in PyCharm and other IDEs.
// SSH target configuration at this wizard stage is characterized by implementing `IncompleteTargetEnvironmentConfiguration` marker
// interface.
if (Registry.`is`("enable.conda.on.targets") || targetEnvironmentConfiguration !is IncompleteTargetEnvironmentConfiguration) {
if (Registry.Companion.`is`("enable.conda.on.targets") || targetEnvironmentConfiguration !is IncompleteTargetEnvironmentConfiguration) {
add(condaPanel)
}
} to venvPanel
@@ -196,11 +191,11 @@ class PyAddTargetBasedSdkPanel(private val project: Project?,
private const val SPLITTER_COMPONENT_CARD_PANE = "Splitter"
/**
* Applies the empty border (i.e. adds insets) to the nearest [DialogPanel].
* Applies the empty border (i.e. adds insets) to the nearest [com.intellij.openapi.ui.DialogPanel].
*
* [com.intellij.ui.dsl.gridLayout.impl.GridImpl] adds extra gaps "to guarantee no visual clippings (like focus rings)" are present.
* This results in an additional offset if checkboxes or radio buttons are added to the panel. We compensate this by adding the proper
* border directly to the [DialogPanel].
* border directly to the [com.intellij.openapi.ui.DialogPanel].
*
* @see com.intellij.ui.dsl.gridLayout.impl.LayoutData.outsideGaps
* @see com.intellij.ui.dsl.gridLayout.impl.GridImpl.getPreferredSizeData
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetBrowserHints
import com.intellij.execution.target.TargetEnvironmentConfiguration
@@ -14,7 +14,11 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton
import com.intellij.openapi.ui.ValidationInfo
import com.intellij.openapi.util.UserDataHolder
import com.intellij.openapi.util.io.FileUtil
import com.intellij.ui.dsl.builder.*
import com.intellij.ui.dsl.builder.AlignX
import com.intellij.ui.dsl.builder.bind
import com.intellij.ui.dsl.builder.bindSelected
import com.intellij.ui.dsl.builder.panel
import com.intellij.ui.dsl.builder.selected
import com.intellij.ui.layout.ComponentPredicate
import com.intellij.ui.layout.not
import com.intellij.util.PathUtil
@@ -24,16 +28,22 @@ import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.pathValidation.PlatformAndRoot.Companion.getPlatformAndRoot
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory.Companion.extendWithTargetSpecificFields
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.VirtualEnvReader.Companion.DEFAULT_VIRTUALENVS_DIR
import com.jetbrains.python.sdk.PyDetectedSdk
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.VirtualEnvReader
import com.jetbrains.python.sdk.add.ExistingPySdkComboBoxItem
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.addBaseInterpretersAsync
import com.jetbrains.python.sdk.add.addInterpretersAsync
import com.jetbrains.python.sdk.configuration.createSdkForTarget
import com.jetbrains.python.sdk.configuration.createVirtualEnvSynchronously
import com.jetbrains.python.sdk.detectVirtualEnvs
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
import com.jetbrains.python.sdk.flavors.PyFlavorData
import com.jetbrains.python.sdk.isAssociatedWithAnotherModule
import com.jetbrains.python.sdk.isAssociatedWithModule
import com.jetbrains.python.sdk.setupAssociated
import com.jetbrains.python.target.PyTargetAwareAdditionalData
import com.jetbrains.python.target.PythonLanguageRuntimeConfiguration
import java.awt.BorderLayout
@@ -42,7 +52,7 @@ import java.util.function.Supplier
/**
* Panel with a control that allows to add either new or selecting existing virtualenv.
*/
class PyAddVirtualEnvPanel(
internal class PyAddVirtualEnvPanel(
project: Project?,
module: Module?,
private val existingSdks: List<Sdk> = emptyList(),
@@ -79,7 +89,7 @@ class PyAddVirtualEnvPanel(
set(value) {
field = value
if (isUnderLocalTarget) {
locationField.text = FileUtil.toSystemDependentName(PySdkSettings.instance.getPreferredVirtualEnvBasePath(projectBasePath))
locationField.text = FileUtil.toSystemDependentName(PySdkSettings.Companion.instance.getPreferredVirtualEnvBasePath(projectBasePath))
}
}
@@ -89,14 +99,15 @@ class PyAddVirtualEnvPanel(
locationField = TextFieldWithBrowseButton().apply {
val targetEnvironmentConfiguration = targetEnvironmentConfiguration
if (targetEnvironmentConfiguration == null) {
text = FileUtil.toSystemDependentName(PySdkSettings.instance.getPreferredVirtualEnvBasePath(projectBasePath))
text = FileUtil.toSystemDependentName(PySdkSettings.Companion.instance.getPreferredVirtualEnvBasePath(projectBasePath))
}
else {
val projectBasePath = projectBasePath
text = when {
projectBasePath.isNullOrEmpty() -> config.userHome
// TODO [run.targets] ideally we want to use '/' or '\' file separators based on the target's OS (which is not available yet)
else -> joinTargetPaths(config.userHome, DEFAULT_VIRTUALENVS_DIR, PathUtil.getFileName(projectBasePath), fileSeparator = '/')
else -> joinTargetPaths(config.userHome, VirtualEnvReader.Companion.DEFAULT_VIRTUALENVS_DIR,
PathUtil.getFileName(projectBasePath), fileSeparator = '/')
}
}
val descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor().withTitle(PySdkBundle.message("python.venv.location.chooser"))
@@ -117,7 +128,7 @@ class PyAddVirtualEnvPanel(
}.bind(getter = { isCreateNewVirtualenv }, setter = { isCreateNewVirtualenv = it })
}
else {
newEnvironmentModeSelected = ComponentPredicate.FALSE
newEnvironmentModeSelected = ComponentPredicate.Companion.FALSE
}
row(PyBundle.message("sdk.create.venv.dialog.interpreter.label")) {
@@ -204,7 +215,7 @@ class PyAddVirtualEnvPanel(
sdkAdditionalData.targetEnvironmentConfiguration = targetEnvironmentConfiguration
val homePath = baseSelectedSdk.homePath!!
// suggesting the proper name for the base SDK fixes the problem with clashing caching key of Python package manager
val customSdkSuggestedName = PythonInterpreterTargetEnvironmentFactory.findDefaultSdkName(project, sdkAdditionalData, version = null)
val customSdkSuggestedName = PythonInterpreterTargetEnvironmentFactory.Companion.findDefaultSdkName(project, sdkAdditionalData, version = null)
sdkAdditionalData.interpreterPath = homePath
SdkConfigurationUtil.createSdk(existingSdks, homePath, PythonSdkType.getInstance(), sdkAdditionalData, customSdkSuggestedName)
}
@@ -229,4 +240,4 @@ class PyAddVirtualEnvPanel(
return createSdkForTarget(project, targetEnvironmentConfiguration, homePath, existingSdks, targetPanelExtension)
}
}
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target.conda
package com.jetbrains.python.sdk.add.v1
import com.intellij.ide.util.PropertiesComponent
import java.nio.file.Path
@@ -1,5 +1,5 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.add.target
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetBasedSdkAdditionalData
import com.intellij.execution.target.TargetEnvironmentConfiguration
@@ -15,7 +15,7 @@ import org.jdom.Element
*
* This class is meant for use in UI and should be used with caution.
*/
class PyDetectedSdkAdditionalData(override var targetEnvironmentConfiguration: TargetEnvironmentConfiguration?,
internal class PyDetectedSdkAdditionalData(override var targetEnvironmentConfiguration: TargetEnvironmentConfiguration?,
flavor: PythonSdkFlavor<*>?) : PythonSdkAdditionalData(flavor),
TargetBasedSdkAdditionalData,
PyRemoteSdkAdditionalDataMarker {
@@ -0,0 +1,8 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
internal val TargetEnvironmentConfiguration?.isMutableTarget: Boolean
get() = this?.let { PythonInterpreterTargetEnvironmentFactory.isMutable(it) } ?: true
@@ -0,0 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.python.sdk.add.ExistingPySdkComboBoxItem
fun Sdk.asComboBoxItem() = ExistingPySdkComboBoxItem(this)
@@ -1,13 +1,16 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.add
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.jetbrains.python.sdk.PySdkListCellRenderer
import com.jetbrains.python.sdk.add.ExistingPySdkComboBoxItem
import com.jetbrains.python.sdk.add.NewPySdkComboBoxItem
import com.jetbrains.python.sdk.add.PySdkComboBoxItem
import java.awt.Component
import javax.swing.JList
import javax.swing.ListCellRenderer
/**
* Adapt [PySdkListCellRenderer] for the list with [PySdkComboBoxItem] items
* Adapt [PySdkListCellRenderer] for the list with [com.jetbrains.python.sdk.add.PySdkComboBoxItem] items
* rather than with [com.intellij.openapi.projectRoots.Sdk] items.
*/
class PySdkListCellRendererExt : ListCellRenderer<PySdkComboBoxItem> {
@@ -1,5 +1,5 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v1
import com.intellij.ui.dsl.builder.Panel
import com.jetbrains.python.target.PyTargetAwareAdditionalData
@@ -15,4 +15,4 @@ interface TargetPanelExtension {
fun applyToTargetConfiguration()
fun applyToAdditionalData(pyTargetAwareAdditionalData: PyTargetAwareAdditionalData)
}
}
@@ -0,0 +1,11 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
/**
* @see com.jetbrains.python.sdk.add.v2.PythonAddLocalInterpreterDialog
* @see com.jetbrains.python.sdk.add.v2.PythonAddNewEnvironmentPanel
* @deprecated in favour of {@link com.jetbrains.python.sdk.add.v2}
*/
@Deprecated
@ApiStatus.Internal
package com.jetbrains.python.sdk.add.v1;
import org.jetbrains.annotations.ApiStatus;
@@ -1,5 +1,5 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v1
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.SystemInfoRt
@@ -15,7 +15,7 @@ import com.intellij.ui.dsl.builder.Panel
import com.intellij.ui.dsl.builder.bindItem
import com.intellij.ui.layout.predicate
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
@@ -10,10 +10,10 @@ import com.intellij.ui.dsl.builder.bindItem
import com.intellij.ui.dsl.builder.bindText
import com.intellij.ui.dsl.listCellRenderer.textListCellRenderer
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.add.target.conda.condaSupportedLanguages
import com.jetbrains.python.sdk.conda.condaSupportedLanguages
import com.jetbrains.python.sdk.flavors.conda.NewCondaEnvRequest
import com.jetbrains.python.statistics.InterpreterCreationMode
import com.jetbrains.python.statistics.InterpreterType
@@ -13,7 +13,7 @@ import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.Panel
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.statistics.InterpreterCreationMode
@@ -1,5 +1,5 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.v2
import com.intellij.execution.target.TargetEnvironmentConfiguration
import com.intellij.execution.wsl.WSLDistribution
@@ -11,7 +11,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.nio.file.Path
class ProjectLocationContexts {
internal class ProjectLocationContexts {
fun getProjectLocationContextFor(projectPath: String): ProjectLocationContext {
val wslPath = parseWindowsUncPath(projectPath)
return if (wslPath != null) WslContext(wslPath.distribution) else LocalContext
@@ -24,13 +24,13 @@ interface ProjectLocationContext {
suspend fun fetchUserHomeDirectory(): Path?
}
data object LocalContext : ProjectLocationContext {
internal data object LocalContext : ProjectLocationContext {
override val targetEnvironmentConfiguration: TargetEnvironmentConfiguration? = null
override suspend fun fetchUserHomeDirectory(): Path? = SystemProperties.getUserHome().nullize(nullizeSpaces = true)?.let { Path.of(it) }
}
data class WslContext(val distribution: WSLDistribution) : ProjectLocationContext {
internal data class WslContext(val distribution: WSLDistribution) : ProjectLocationContext {
override val targetEnvironmentConfiguration: TargetEnvironmentConfiguration = WslTargetEnvironmentConfiguration(distribution)
override suspend fun fetchUserHomeDirectory(): Path? =
@@ -1,9 +1,9 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add
package com.jetbrains.python.sdk.add.v2
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.ModuleOrProject
interface PySdkCreator {
@@ -10,7 +10,7 @@ import com.intellij.ui.dsl.builder.Panel
import com.intellij.ui.dsl.builder.bind
import com.intellij.ui.dsl.builder.bindItem
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.add.v2.PythonSupportedEnvironmentManagers.*
import com.jetbrains.python.util.ErrorSink
@@ -7,9 +7,7 @@ import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.platform.util.coroutines.flow.mapStateIn
import com.intellij.util.text.nullize
import com.jetbrains.python.sdk.add.ProjectLocationContext
import com.jetbrains.python.sdk.add.ProjectLocationContexts
import com.jetbrains.python.sdk.add.target.conda.suggestCondaPath
import com.jetbrains.python.sdk.conda.suggestCondaPath
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
import kotlinx.coroutines.*
@@ -22,10 +22,9 @@ import com.intellij.ui.dsl.builder.TopGap
import com.intellij.ui.dsl.builder.bindText
import com.intellij.util.ui.showingScope
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.VirtualEnvReader
import com.jetbrains.python.sdk.add.PySdkCreator
import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode.*
import com.jetbrains.python.statistics.InterpreterCreationMode
import com.jetbrains.python.statistics.InterpreterTarget
@@ -6,7 +6,7 @@ import com.intellij.openapi.ui.validation.DialogValidationRequestor
import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.Panel
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.statistics.InterpreterCreationMode
import com.jetbrains.python.statistics.InterpreterType
@@ -16,8 +16,8 @@ import com.intellij.ui.dsl.builder.*
import com.intellij.ui.dsl.builder.components.validationTooltip
import com.intellij.util.ui.showingScope
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProject.collector.PythonNewProjectWizardCollector
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.PythonNewProjectWizardCollector
import com.jetbrains.python.sdk.VirtualEnvReader
import com.jetbrains.python.newProjectWizard.validateProjectPathAndGetPath
import com.jetbrains.python.sdk.ModuleOrProject
@@ -17,7 +17,7 @@ import com.intellij.openapi.wm.IdeFocusManager
import com.intellij.ui.dsl.builder.Panel
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.icons.PythonIcons
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.LOGGER
import com.jetbrains.python.sdk.ModuleOrProject
import com.jetbrains.python.sdk.PythonSdkType
@@ -13,9 +13,9 @@ import com.intellij.util.concurrency.annotations.RequiresEdt
import com.jetbrains.python.PyBundle
import com.jetbrains.python.sdk.PythonSdkAdditionalData
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.add.target.conda.TargetCommandExecutor
import com.jetbrains.python.sdk.add.target.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.add.target.conda.createCondaSdkAlongWithNewEnv
import com.jetbrains.python.sdk.conda.TargetCommandExecutor
import com.jetbrains.python.sdk.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.conda.createCondaSdkAlongWithNewEnv
import com.jetbrains.python.sdk.flavors.conda.NewCondaEnvRequest
import com.jetbrains.python.sdk.flavors.conda.PyCondaCommand
import com.jetbrains.python.sdk.flavors.conda.PyCondaFlavorData
@@ -21,7 +21,7 @@ import com.jetbrains.python.configuration.PyConfigurableInterpreterList
import com.jetbrains.python.newProject.steps.ProjectSpecificSettingsStep
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.target.conda.suggestCondaPath
import com.jetbrains.python.sdk.conda.suggestCondaPath
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
@@ -17,7 +17,7 @@ import com.jetbrains.extensions.failure
import com.jetbrains.python.PyBundle.message
import com.jetbrains.python.sdk.PythonSdkType
import com.jetbrains.python.sdk.VirtualEnvReader
import com.jetbrains.python.sdk.add.target.conda.createCondaSdkFromExistingEnv
import com.jetbrains.python.sdk.conda.createCondaSdkFromExistingEnv
import com.jetbrains.python.sdk.excludeInnerVirtualEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaCommand
import com.jetbrains.python.sdk.suggestAssociatedSdkName
@@ -1,5 +1,5 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.add.target.conda
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk.conda
import com.intellij.execution.Platform
import com.intellij.execution.process.CapturingProcessHandler
@@ -21,6 +21,9 @@ import com.intellij.platform.util.progress.RawProgressReporter
import com.jetbrains.extensions.failure
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.v1.PyAddCondaPanelModel
import com.jetbrains.python.sdk.add.v1.loadLocalPythonCondaPath
import com.jetbrains.python.sdk.add.v1.saveLocalPythonCondaPath
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
import com.jetbrains.python.sdk.flavors.conda.*
import com.jetbrains.python.target.PyTargetAwareAdditionalData
@@ -37,7 +40,7 @@ import kotlin.io.path.pathString
/**
* Levels to be used for new conda envs
*/
val condaSupportedLanguages: List<LanguageLevel>
internal val condaSupportedLanguages: List<LanguageLevel>
get() = LanguageLevel.SUPPORTED_LEVELS
.asReversed()
.filter { it < LanguageLevel.PYTHON313 }
@@ -26,9 +26,9 @@ import com.jetbrains.python.packaging.PyPackageManager
import com.jetbrains.python.packaging.PyPackageManagers
import com.jetbrains.python.run.PythonInterpreterTargetEnvironmentFactory
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.target.PyAddSdkPanelBase
import com.jetbrains.python.sdk.add.target.PyAddSdkPanelBase.Companion.isLocal
import com.jetbrains.python.sdk.add.target.TargetPanelExtension
import com.jetbrains.python.sdk.add.v1.PyAddSdkPanelBase
import com.jetbrains.python.sdk.add.v1.PyAddSdkPanelBase.Companion.isLocal
import com.jetbrains.python.sdk.add.v1.TargetPanelExtension
import com.jetbrains.python.sdk.flavors.PyFlavorAndData
import com.jetbrains.python.sdk.flavors.PyFlavorData
import com.jetbrains.python.target.PyTargetAwareAdditionalData
@@ -6,12 +6,11 @@ import com.fasterxml.jackson.databind.node.ObjectNode
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.google.gson.Gson
import com.intellij.execution.target.*
import com.intellij.openapi.progress.*
import com.intellij.openapi.projectRoots.Sdk
import com.jetbrains.extensions.failure
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.sdk.add.target.conda.TargetCommandExecutor
import com.jetbrains.python.sdk.add.target.conda.createCondaSdkFromExistingEnv
import com.jetbrains.python.sdk.conda.TargetCommandExecutor
import com.jetbrains.python.sdk.conda.createCondaSdkFromExistingEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv.Companion.getEnvs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.future.await
@@ -21,7 +21,7 @@ import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.PythonModuleTypeBase
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.PyAddNewEnvPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
@@ -10,9 +10,9 @@ import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.sdk.*
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.PyAddSdkView
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.PyAddSdkPanel
import com.jetbrains.python.sdk.add.addInterpretersAsync
import com.jetbrains.python.sdk.poetry.*
import java.awt.BorderLayout
@@ -20,11 +20,12 @@ import com.intellij.util.text.nullize
import com.intellij.util.ui.FormBuilder
import com.jetbrains.python.PyBundle
import com.jetbrains.python.PySdkBundle
import com.jetbrains.python.newProject.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.*
import com.jetbrains.python.newProjectWizard.collector.InterpreterStatisticsInfo
import com.jetbrains.python.sdk.PySdkSettings
import com.jetbrains.python.sdk.add.PyAddNewEnvPanel
import com.jetbrains.python.sdk.add.PySdkPathChoosingComboBox
import com.jetbrains.python.sdk.add.addInterpretersAsync
import com.jetbrains.python.sdk.basePath
import com.jetbrains.python.sdk.poetry.*
import com.jetbrains.python.statistics.InterpreterTarget
import com.jetbrains.python.statistics.InterpreterType
@@ -40,11 +41,13 @@ import kotlin.io.path.absolutePathString
* The UI panel for adding the poetry interpreter for the project.
*
*/
class PyAddNewPoetryPanel(private val project: Project?,
private val module: Module?,
private val existingSdks: List<Sdk>,
override var newProjectPath: String?,
context: UserDataHolder) : PyAddNewEnvPanel() {
class PyAddNewPoetryPanel(
private val project: Project?,
private val module: Module?,
private val existingSdks: List<Sdk>,
override var newProjectPath: String?,
context: UserDataHolder,
) : PyAddNewEnvPanel() {
override val envName = "Poetry"
override val panelName: String get() = PyBundle.message("python.sdk.poetry.environment.panel.title")
@@ -14,7 +14,7 @@ import com.intellij.ui.dsl.builder.AlignX
import com.intellij.ui.dsl.builder.panel
import com.jetbrains.python.PyBundle
import com.jetbrains.python.configuration.PyConfigurableInterpreterList
import com.jetbrains.python.sdk.add.target.PyAddTargetBasedSdkPanel
import com.jetbrains.python.sdk.add.v1.PyAddTargetBasedSdkPanel
import java.util.function.Supplier
class PythonLanguageRuntimeUI(project: Project,
+1 -1
View File
@@ -12,7 +12,7 @@ import com.jetbrains.env.PyEnvTestSettings
import com.jetbrains.extensions.failure
import com.jetbrains.python.packaging.findCondaExecutableRelativeToEnv
import com.jetbrains.python.sdk.VirtualEnvReader
import com.jetbrains.python.sdk.add.target.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.conda.TargetEnvironmentRequestCommandExecutor
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv
import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity
import kotlinx.coroutines.Dispatchers

Some files were not shown because too many files have changed in this diff Show More