diff options
Diffstat (limited to 'python/ide/src')
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()) { |