From fcfa97873008c2cf59a66a18533ff98f876d2d81 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 21 May 2015 19:49:47 +0300 Subject: [PATCH] PY-15958 PyActiveSdkConfigurable accounts changes made via "Project Interpreters" dialog Otherwise Python SDK settings, in particular interpreter paths, are not persisted properly unless project interpreter was changed as well. --- .../PyActiveSdkConfigurable.java | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java index 34d24cd0a8e2..06c8aa3a34d1 100644 --- a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java +++ b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java @@ -69,6 +69,7 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable { private JButton myDetailsButton; private static final String SHOW_ALL = "Show All"; private NullableConsumer myDetailsCallback; + private boolean mySdkSettingsWereModified = false; public PyActiveSdkConfigurable(@NotNull Project project) { myModule = null; @@ -123,6 +124,7 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable { updateSdkList(false); mySdkCombo.getModel().setSelectedItem(myProjectSdksModel.findSdk(sdk.getName())); } + mySdkSettingsWereModified = true; } }; myDetailsButton.addActionListener(new ActionListener() { @@ -253,7 +255,7 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable { final Sdk selectedItem = (Sdk)mySdkCombo.getSelectedItem(); Sdk sdk = getSdk(); sdk = sdk == null ? null : myProjectSdksModel.findSdk(sdk.getName()); - return selectedItem instanceof PyDetectedSdk || sdk != selectedItem; + return selectedItem instanceof PyDetectedSdk || sdk != selectedItem || mySdkSettingsWereModified; } @Nullable @@ -267,43 +269,48 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable { @Override public void apply() throws ConfigurationException { - final Sdk item = (Sdk)mySdkCombo.getSelectedItem(); - Sdk newSdk = item; - if (item instanceof PyDetectedSdk) { - VirtualFile sdkHome = ApplicationManager.getApplication().runWriteAction(new Computable() { - @Override - public VirtualFile compute() { - return LocalFileSystem.getInstance().refreshAndFindFileByPath(item.getName()); + try { + final Sdk item = (Sdk)mySdkCombo.getSelectedItem(); + Sdk newSdk = item; + if (item instanceof PyDetectedSdk) { + VirtualFile sdkHome = ApplicationManager.getApplication().runWriteAction(new Computable() { + @Override + public VirtualFile compute() { + return LocalFileSystem.getInstance().refreshAndFindFileByPath(item.getName()); + } + }); + newSdk = SdkConfigurationUtil.setupSdk(myProjectSdksModel.getSdks(), sdkHome, PythonSdkType.getInstance(), true, null, null); + if (newSdk != null) { + myProjectSdksModel.addSdk(newSdk); + updateSdkList(false); } - }); - newSdk = SdkConfigurationUtil.setupSdk(myProjectSdksModel.getSdks(), sdkHome, PythonSdkType.getInstance(), true, null, null); - if (newSdk != null) { - myProjectSdksModel.addSdk(newSdk); - updateSdkList(false); + PySdkService.getInstance().solidifySdk(item); } - PySdkService.getInstance().solidifySdk(item); - } - myProjectSdksModel.apply(); - newSdk = newSdk == null ? null : myProjectSdksModel.findSdk(newSdk.getName()); - mySdkCombo.getModel().setSelectedItem(newSdk); + myProjectSdksModel.apply(); + newSdk = newSdk == null ? null : myProjectSdksModel.findSdk(newSdk.getName()); + mySdkCombo.getModel().setSelectedItem(newSdk); - final Sdk prevSdk = getSdk(); - setSdk(newSdk); + final Sdk prevSdk = getSdk(); + setSdk(newSdk); - // update string literals if different LanguageLevel was selected - 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(newSdk); - final LanguageLevel languageLevel2 = flavor2.getLanguageLevel(prevSdk); - if ((languageLevel1.isPy3K() && languageLevel2.isPy3K()) || - (!languageLevel1.isPy3K()) && !languageLevel2.isPy3K()) { - return; + // update string literals if different LanguageLevel was selected + 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(newSdk); + final LanguageLevel languageLevel2 = flavor2.getLanguageLevel(prevSdk); + if ((languageLevel1.isPy3K() && languageLevel2.isPy3K()) || + (!languageLevel1.isPy3K()) && !languageLevel2.isPy3K()) { + return; + } } } + rehighlightStrings(myProject); + } + finally { + mySdkSettingsWereModified = false; } - rehighlightStrings(myProject); } private void setSdk(final Sdk item) {