summaryrefslogtreecommitdiff
path: root/python/ide/src/com/jetbrains
diff options
context:
space:
mode:
Diffstat (limited to 'python/ide/src/com/jetbrains')
-rw-r--r--python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java18
-rw-r--r--python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java74
-rw-r--r--python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java2
3 files changed, 39 insertions, 55 deletions
diff --git a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
index fc165b8893f6..38195d1380b9 100644
--- a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
+++ b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java
@@ -298,14 +298,14 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
}
final Sdk prevSdk = ProjectRootManager.getInstance(myProject).getProjectSdk();
- final Sdk selectedSdk = setSdk(newSdk);
+ setSdk(newSdk);
// update string literals if different LanguageLevel was selected
- if (prevSdk != null && selectedSdk != null) {
- final PythonSdkFlavor flavor1 = PythonSdkFlavor.getFlavor(selectedSdk);
+ if (prevSdk != null && newSdk != null) {
+ final PythonSdkFlavor flavor1 = PythonSdkFlavor.getFlavor(newSdk);
final PythonSdkFlavor flavor2 = PythonSdkFlavor.getFlavor(prevSdk);
if (flavor1 != null && flavor2 != null) {
- final LanguageLevel languageLevel1 = flavor1.getLanguageLevel(selectedSdk);
+ final LanguageLevel languageLevel1 = flavor1.getLanguageLevel(newSdk);
final LanguageLevel languageLevel2 = flavor2.getLanguageLevel(prevSdk);
if ((languageLevel1.isPy3K() && languageLevel2.isPy3K()) ||
(!languageLevel1.isPy3K()) && !languageLevel2.isPy3K()) {
@@ -316,22 +316,20 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
rehighlightStrings(myProject);
}
- private Sdk setSdk(Sdk item) {
+ private void setSdk(final Sdk item) {
myAddedSdks.clear();
- final Sdk selectedSdk = myProjectSdksModel.findSdk(item);
if (myModule == null) {
final ProjectRootManager rootManager = ProjectRootManager.getInstance(myProject);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
- rootManager.setProjectSdk(selectedSdk);
+ rootManager.setProjectSdk(item);
}
});
}
else {
- ModuleRootModificationUtil.setModuleSdk(myModule, selectedSdk);
+ ModuleRootModificationUtil.setModuleSdk(myModule, item);
}
- return selectedSdk;
}
public static void rehighlightStrings(final @NotNull Project project) {
@@ -429,8 +427,6 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
public void sdkAdded(Sdk sdk) {
final Object item = myConfigurable.mySdkCombo.getSelectedItem();
- myConfigurable.resetSdkList();
-
if (item instanceof PyDetectedSdk) {
final String path = ((PyDetectedSdk)item).getHomePath();
if (path != null && path.equals(sdk.getHomePath()))
diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java
index 1ad9cf7ececc..6514741fda45 100644
--- a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java
+++ b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java
@@ -33,15 +33,11 @@ import com.jetbrains.python.configuration.PyConfigurableInterpreterList;
import com.jetbrains.python.configuration.VirtualEnvProjectFilter;
import com.jetbrains.python.newProject.PyFrameworkProjectGenerator;
import com.jetbrains.python.newProject.PythonProjectGenerator;
-import com.jetbrains.python.packaging.PyExternalProcessException;
-import com.jetbrains.python.packaging.PyPackage;
import com.jetbrains.python.packaging.PyPackageManager;
-import com.jetbrains.python.packaging.PyPackageManagerImpl;
+import com.jetbrains.python.sdk.PySdkUtil;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.sdk.flavors.JythonSdkFlavor;
-import com.jetbrains.python.sdk.flavors.PyPySdkFlavor;
-import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
import icons.PythonIcons;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -79,22 +75,6 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
myCallback = callback;
myIsWelcomeScreen = isWelcomeScreen;
myProjectDirectory = FileUtil.findSequentNonexistentFile(new File(ProjectUtil.getBaseDir()), "untitled", "");
- if (myProjectGenerator instanceof WebProjectTemplate) {
- ((WebProjectTemplate)myProjectGenerator).getPeer().addSettingsStateListener(new WebProjectGenerator.SettingsStateListener() {
- @Override
- public void stateChanged(boolean validSettings) {
- checkValid();
- }
- });
- }
- else if (myProjectGenerator instanceof PythonProjectGenerator) {
- ((PythonProjectGenerator)myProjectGenerator).addSettingsStateListener(new PythonProjectGenerator.SettingsListener() {
- @Override
- public void stateChanged() {
- checkValid();
- }
- });
- }
myCreateAction = new AnAction("Create", "Create Project", getIcon()) {
@Override
@@ -112,6 +92,7 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
@Override
public JPanel createPanel() {
+ initGeneratorListeners();
final JPanel basePanel = createBasePanel();
final JPanel mainPanel = new JPanel(new BorderLayout());
@@ -142,6 +123,25 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
return mainPanel;
}
+ private void initGeneratorListeners() {
+ if (myProjectGenerator instanceof WebProjectTemplate) {
+ ((WebProjectTemplate)myProjectGenerator).getPeer().addSettingsStateListener(new WebProjectGenerator.SettingsStateListener() {
+ @Override
+ public void stateChanged(boolean validSettings) {
+ checkValid();
+ }
+ });
+ }
+ else if (myProjectGenerator instanceof PythonProjectGenerator) {
+ ((PythonProjectGenerator)myProjectGenerator).addSettingsStateListener(new PythonProjectGenerator.SettingsListener() {
+ @Override
+ public void stateChanged() {
+ checkValid();
+ }
+ });
+ }
+ }
+
protected Icon getIcon() {
return myProjectGenerator.getLogo();
}
@@ -319,29 +319,13 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
PyFrameworkProjectGenerator frameworkProjectGenerator = (PyFrameworkProjectGenerator)myProjectGenerator;
String frameworkName = frameworkProjectGenerator.getFrameworkTitle();
if (sdk != null && !isFrameworkInstalled(sdk)) {
- final PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
- final boolean onlyWithCache =
- PythonSdkFlavor.getFlavor(sdk) instanceof JythonSdkFlavor || PythonSdkFlavor.getFlavor(sdk) instanceof PyPySdkFlavor;
String warningText = frameworkName + " will be installed on selected interpreter";
- try {
- if (onlyWithCache && packageManager.cacheIsNotNull() || !onlyWithCache) {
- final PyPackage pip = packageManager.findInstalledPackage("pip");
- myInstallFramework = true;
- if (pip == null) {
- warningText = "pip and " + warningText;
- }
- setWarningText(warningText);
- }
- }
- catch (PyExternalProcessException ignored) {
- myInstallFramework = true;
- warningText = "pip and " + warningText;
- setWarningText(warningText);
- }
- if (!myInstallFramework) {
- setErrorText("No " + frameworkName + " support installed in selected interpreter");
- return false;
+ myInstallFramework = true;
+ final PyPackageManager packageManager = PyPackageManager.getInstance(sdk);
+ if (!packageManager.hasManagement(PySdkUtil.isRemote(sdk))) {
+ warningText = "Python packaging tools and " + warningText;
}
+ setWarningText(warningText);
}
if (isPy3k && !((PyFrameworkProjectGenerator)myProjectGenerator).supportsPython3()) {
setErrorText(frameworkName + " is not supported for the selected interpreter");
@@ -454,6 +438,10 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
return myLocationField.getText();
}
+ public void setLocation(@NotNull final String location) {
+ myLocationField.setText(location);
+ }
+
public boolean installFramework() {
return myInstallFramework;
}
diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java b/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java
index 2aa9a391512f..2e88b7f2767c 100644
--- a/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java
+++ b/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java
@@ -104,7 +104,7 @@ public class GenerateProjectCallback implements NullableConsumer<AbstractProject
}
@Nullable
- private Project generateProject(@NotNull final Project project, @NotNull final AbstractProjectSettingsStep settings) {
+ private static Project generateProject(@NotNull final Project project, @NotNull final AbstractProjectSettingsStep settings) {
final DirectoryProjectGenerator generator = settings.getProjectGenerator();
final File location = new File(settings.getProjectLocation());
if (!location.exists() && !location.mkdirs()) {