From ed6ff89722e96b2ee5cdc2368f2479a46aafcdcd Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Wed, 12 Feb 2014 22:06:41 +0400 Subject: [PATCH] added detected sdks to create virtual env --- .../PyConfigurableInterpreterList.java | 2 +- .../python/sdk/CreateVirtualEnvDialog.java | 20 +++++++++---------- .../jetbrains/python/sdk/PyDetectedSdk.java | 5 ++--- .../python/sdk/PythonSdkDetailsStep.java | 13 ++++++++++-- .../python/sdk/flavors/PythonSdkFlavor.java | 7 ++++++- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/python/ide/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java b/python/ide/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java index 009c13e76320..0260c8e7edc2 100644 --- a/python/ide/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java +++ b/python/ide/src/com/jetbrains/python/configuration/PyConfigurableInterpreterList.java @@ -122,7 +122,7 @@ public class PyConfigurableInterpreterList { } for (String sdkHome : SdkConfigurationUtil.filterExistingPaths(PythonSdkType.getInstance(), sdkHomes, getModel().getSdks())) { - result.add(new PyDetectedSdk(sdkHome, PythonSdkType.getInstance())); + result.add(new PyDetectedSdk(sdkHome)); } return result; } diff --git a/python/src/com/jetbrains/python/sdk/CreateVirtualEnvDialog.java b/python/src/com/jetbrains/python/sdk/CreateVirtualEnvDialog.java index 03331569c0f3..165d73732043 100644 --- a/python/src/com/jetbrains/python/sdk/CreateVirtualEnvDialog.java +++ b/python/src/com/jetbrains/python/sdk/CreateVirtualEnvDialog.java @@ -15,6 +15,8 @@ */ package com.jetbrains.python.sdk; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; import com.intellij.facet.ui.FacetEditorValidator; import com.intellij.facet.ui.FacetValidatorsManager; import com.intellij.openapi.application.Application; @@ -114,6 +116,12 @@ public class CreateVirtualEnvDialog extends IdeaDialog { init(); setTitle("Create Virtual Environment"); if (suggestedBaseSdk == null && allSdks.size() > 0) { + Iterables.removeIf(allSdks, new Predicate() { + @Override + public boolean apply(Sdk s) { + return PythonSdkType.isInvalid(s) || PythonSdkType.isVirtualEnv(s) || RemoteSdkDataHolder.isRemoteSdk(s.getHomePath()); + } + }); List sortedSdks = new ArrayList(allSdks); Collections.sort(sortedSdks, new PreferredSdkComparator()); suggestedBaseSdk = sortedSdks.get(0); @@ -229,17 +237,7 @@ public class CreateVirtualEnvDialog extends IdeaDialog { private void updateSdkList(final List allSdks, @Nullable Sdk initialSelection) { mySdkCombo.setRenderer(new PySdkListCellRenderer()); - List baseSdks = new ArrayList(); - for (Sdk s : allSdks) { - if (!PythonSdkType.isInvalid(s) && !PythonSdkType.isVirtualEnv(s) && !RemoteSdkDataHolder.isRemoteSdk(s.getHomePath())) { - baseSdks.add(s); - } - else if (s.equals(initialSelection)){ - initialSelection = null; - } - } - - mySdkCombo.setModel(new CollectionComboBoxModel(baseSdks, initialSelection)); + mySdkCombo.setModel(new CollectionComboBoxModel(allSdks, initialSelection)); } @Override diff --git a/python/src/com/jetbrains/python/sdk/PyDetectedSdk.java b/python/src/com/jetbrains/python/sdk/PyDetectedSdk.java index 4b5d0e2f5529..098462ef44fb 100644 --- a/python/src/com/jetbrains/python/sdk/PyDetectedSdk.java +++ b/python/src/com/jetbrains/python/sdk/PyDetectedSdk.java @@ -1,11 +1,10 @@ package com.jetbrains.python.sdk; -import com.intellij.openapi.projectRoots.SdkTypeId; import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; public class PyDetectedSdk extends ProjectJdkImpl { - public PyDetectedSdk(String name, SdkTypeId sdkType) { - super(name, sdkType); + public PyDetectedSdk(String name) { + super(name, PythonSdkType.getInstance()); setHomePath(name); } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkDetailsStep.java b/python/src/com/jetbrains/python/sdk/PythonSdkDetailsStep.java index a930baf95f48..8e3f18a9ee13 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkDetailsStep.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkDetailsStep.java @@ -36,7 +36,7 @@ import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collection; import java.util.List; public class PythonSdkDetailsStep extends BaseListPopupStep { @@ -148,7 +148,16 @@ public class PythonSdkDetailsStep extends BaseListPopupStep { }; final CreateVirtualEnvDialog dialog; - final List allSdks = Arrays.asList(myExistingSdks); + final List allSdks = Lists.newArrayList(myExistingSdks); + + final List flavors = PythonSdkFlavor.getApplicableFlavors(false); + for (PythonSdkFlavor flavor : flavors) { + final Collection strings = flavor.suggestHomePaths(); + for (String string : strings) { + allSdks.add(new PyDetectedSdk(string)); + } + } + if (myProject != null) { dialog = new CreateVirtualEnvDialog(myProject, allSdks, null); } diff --git a/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java index 60fa8025a8a6..07c8e1c30c60 100644 --- a/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java @@ -72,6 +72,10 @@ public abstract class PythonSdkFlavor { } public static List getApplicableFlavors() { + return getApplicableFlavors(true); + } + + public static List getApplicableFlavors(boolean addPlatformIndependent) { List result = new ArrayList(); if (SystemInfo.isWindows) { @@ -84,7 +88,8 @@ public abstract class PythonSdkFlavor { result.add(UnixPythonSdkFlavor.INSTANCE); } - result.addAll(getPlatformIndependentFlavors()); + if (addPlatformIndependent) + result.addAll(getPlatformIndependentFlavors()); return result; }