fixed python interpreter apply
authorEkaterina Tuzova <Ekaterina.Tuzova@jetbrains.com>
Thu, 3 Sep 2015 12:52:35 +0000 (15:52 +0300)
committerEkaterina Tuzova <Ekaterina.Tuzova@jetbrains.com>
Thu, 3 Sep 2015 12:53:52 +0000 (15:53 +0300)
we now use findSdkByName only for selecting sdk in UI, in other cases we find sdk by identity

python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java

index cf368111a7beedd7916063b61b01bf52c8d005a5..d24e85a71ff8db169246c181f6935f2c5c71610d 100644 (file)
@@ -36,6 +36,7 @@ import com.intellij.openapi.roots.ProjectRootManager;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
 import com.intellij.openapi.ui.ComboBox;
 import com.intellij.openapi.ui.FixedSizeButton;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -257,8 +258,8 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
   public boolean isModified() {
     final Sdk selectedItem = (Sdk)mySdkCombo.getSelectedItem();
     Sdk sdk = getSdk();
-    sdk = sdk == null ? null : myProjectSdksModel.findSdk(sdk.getName());
-    return selectedItem instanceof PyDetectedSdk || sdk != selectedItem || mySdkSettingsWereModified;
+    final Sdk selectedSdk = selectedItem == null ? null : myProjectSdksModel.findSdk(selectedItem);
+    return selectedItem instanceof PyDetectedSdk || !Comparing.equal(sdk, selectedSdk) || mySdkSettingsWereModified;
   }
 
   @Nullable
@@ -274,7 +275,7 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
   public void apply() throws ConfigurationException {
     try {
       final Sdk item = (Sdk)mySdkCombo.getSelectedItem();
-      Sdk newSdk = item;
+      Sdk newSdk = item == null ? null : myProjectSdksModel.findSdk(item);
       if (item instanceof PyDetectedSdk) {
         VirtualFile sdkHome = ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() {
           @Override
@@ -282,16 +283,15 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable {
             return LocalFileSystem.getInstance().refreshAndFindFileByPath(item.getName());
           }
         });
-        newSdk = SdkConfigurationUtil.setupSdk(myProjectSdksModel.getSdks(), sdkHome, PythonSdkType.getInstance(), true, null, null);
+        newSdk = SdkConfigurationUtil.createAndAddSDK(sdkHome.getPath(), PythonSdkType.getInstance());
         if (newSdk != null) {
           myProjectSdksModel.addSdk(newSdk);
           updateSdkList(false);
+          myProjectSdksModel.apply();
         }
         PySdkService.getInstance().solidifySdk(item);
       }
-      myProjectSdksModel.apply();
-      newSdk = newSdk == null ? null : myProjectSdksModel.findSdk(newSdk.getName());
-      mySdkCombo.getModel().setSelectedItem(newSdk);
+      mySdkCombo.getModel().setSelectedItem(newSdk == null ? null : myProjectSdksModel.findSdk(newSdk.getName()));
 
       final Sdk prevSdk = getSdk();
       setSdk(newSdk);