diff --git a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java index 2cc93ec5d51f..ca28d4964f8f 100644 --- a/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java +++ b/python/ide/src/com/jetbrains/python/configuration/PyActiveSdkConfigurable.java @@ -19,9 +19,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.UnnamedConfigurable; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkModel; @@ -276,12 +273,8 @@ public class PyActiveSdkConfigurable implements UnnamedConfigurable { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { - ProgressManager.getInstance().run(new Task.Backgroundable(myProject, PyBundle.message("sdk.gen.updating.skels"), false) { - @Override - public void run(@NotNull ProgressIndicator indicator) { - PythonSdkUpdater.updateSdk(finalSelectedSdk, myProject); - } - }); + assert finalSelectedSdk != null; + PythonSdkType.getInstance().setupSdkPaths(finalSelectedSdk, myProject, null); } }); } diff --git a/python/ide/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java b/python/ide/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java index 7d1fc17bf64f..bdea87481431 100644 --- a/python/ide/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java +++ b/python/ide/src/com/jetbrains/python/configuration/PythonSdkDetailsDialog.java @@ -418,7 +418,7 @@ public class PythonSdkDetailsDialog extends DialogWrapper { } private void reloadSdk(Sdk currentSdk) { - PythonSdkType.setupSdkPaths(currentSdk, myProject, null, myModificators.get(currentSdk)); // or must it be a RunWriteAction? + PythonSdkType.getInstance().setupSdkPaths(currentSdk, myProject, null, myModificators.get(currentSdk)); // or must it be a RunWriteAction? } private class ToggleVirtualEnvFilterButton extends ToggleActionButton implements DumbAware { 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 c02667ffcc85..06252886fd0e 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java @@ -67,7 +67,7 @@ public class GenerateProjectCallback implements NullableConsumer> SDK_CREATOR_COMPONENT_KEY = Key.create("#com.jetbrains.python.sdk.creatorComponent"); + private Set scheduledToRefresh = ContainerUtil.newConcurrentSet(); + public static PythonSdkType getInstance() { return SdkType.findInstance(PythonSdkType.class); } @@ -521,15 +524,17 @@ public class PythonSdkType extends SdkType { return true; // run setupSdkPaths only once (from PythonSdkDetailsStep). Skip this from showCustomCreateUI } - public static void setupSdkPaths(@NotNull final Sdk sdk, + public void setupSdkPaths(@NotNull final Sdk sdk, @Nullable final Project project, @Nullable final Component ownerComponent, @NotNull final SdkModificator sdkModificator) { + scheduledToRefresh.add(sdk.getHomePath()); doSetupSdkPaths(project, ownerComponent, PySdkUpdater.fromSdkModificator(sdk, sdkModificator)); } - public static void setupSdkPaths(final Sdk sdk, @Nullable final Project project, @Nullable final Component ownerComponent) { + public void setupSdkPaths(final Sdk sdk, @Nullable final Project project, @Nullable final Component ownerComponent) { + scheduledToRefresh.add(sdk.getHomePath()); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { @@ -551,7 +556,7 @@ public class PythonSdkType extends SdkType { }, ModalityState.NON_MODAL); } - private static boolean doSetupSdkPaths(@Nullable final Project project, + private boolean doSetupSdkPaths(@Nullable final Project project, @Nullable final Component ownerComponent, @NotNull final PySdkUpdater sdkUpdater) { if (isRemote(sdkUpdater.getSdk()) && project == null && ownerComponent == null) { @@ -572,6 +577,10 @@ public class PythonSdkType extends SdkType { application.invokeLater(new Runnable() { @Override public void run() { + if (!scheduledToRefresh.contains(sdkUpdater.getHomePath())) { + return; + } + scheduledToRefresh.remove(sdkUpdater.getHomePath()); progressManager.run(new Task.Backgroundable(project, PyBundle.message("sdk.gen.updating.skels"), false) { @Override public void run(@NotNull ProgressIndicator indicator) { diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java index 68f420303935..03b6a121973d 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java @@ -78,7 +78,7 @@ public class PythonSdkUpdater implements StartupActivity { updateActiveSdks(project, 7000); } - public void updateActiveSdks(@NotNull final Project project, final int delay) { + public static void updateActiveSdks(@NotNull final Project project, final int delay) { final Set sdksToUpdate = new HashSet(); for (Module module : ModuleManager.getInstance(project).getModules()) { final Sdk sdk = PythonSdkType.findPythonSdk(module); @@ -96,7 +96,7 @@ public class PythonSdkUpdater implements StartupActivity { } } - private void updateSdks(final Project project, final int delay, final Set sdksToUpdate) { + private static void updateSdks(final Project project, final int delay, final Set sdksToUpdate) { ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { if (delay > 0) {