From fac3b0068b045690e5dc0c277549e6c3564a7569 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 22 Dec 2014 17:07:32 +0300 Subject: [PATCH] Don't fail on index update when counting paths for bad abi roots EA-63535 --- .../versions/KotlinRuntimeLibraryUtil.java | 4 +++- ...edAbiVersionNotificationPanelProvider.java | 20 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/versions/KotlinRuntimeLibraryUtil.java b/idea/src/org/jetbrains/jet/plugin/versions/KotlinRuntimeLibraryUtil.java index ee30d73ac9e..1f07786e82c 100644 --- a/idea/src/org/jetbrains/jet/plugin/versions/KotlinRuntimeLibraryUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/versions/KotlinRuntimeLibraryUtil.java @@ -22,11 +22,13 @@ import com.google.common.collect.Sets; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkModificator; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.JarFileSystem; @@ -61,7 +63,7 @@ public class KotlinRuntimeLibraryUtil { @NotNull public static Collection getLibraryRootsWithAbiIncompatibleKotlinClasses(@NotNull Project project) { - ID id = KotlinAbiVersionIndex.INSTANCE.getName(); + ID id = KotlinAbiVersionIndex.INSTANCE.getName(); Collection abiVersions = FileBasedIndex.getInstance().getAllKeys(id, project); Set badAbiVersions = Sets.newHashSet(Collections2.filter(abiVersions, new Predicate() { @Override diff --git a/idea/src/org/jetbrains/jet/plugin/versions/UnsupportedAbiVersionNotificationPanelProvider.java b/idea/src/org/jetbrains/jet/plugin/versions/UnsupportedAbiVersionNotificationPanelProvider.java index 767de2cfe0c..23112e7774a 100644 --- a/idea/src/org/jetbrains/jet/plugin/versions/UnsupportedAbiVersionNotificationPanelProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/versions/UnsupportedAbiVersionNotificationPanelProvider.java @@ -37,6 +37,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VfsUtilCore; @@ -157,13 +158,20 @@ public class UnsupportedAbiVersionNotificationPanelProvider extends EditorNotifi Runnable action = new Runnable() { @Override public void run() { - Collection badRoots = - KotlinRuntimeLibraryUtil.getLibraryRootsWithAbiIncompatibleKotlinClasses(project); - assert !badRoots.isEmpty() : "This action should only be called when bad roots are present"; + DumbService.getInstance(project).tryRunReadActionInSmartMode(new Computable() { + @Override + public Object compute() { + Collection badRoots = + KotlinRuntimeLibraryUtil.getLibraryRootsWithAbiIncompatibleKotlinClasses(project); + assert !badRoots.isEmpty() : "This action should only be called when bad roots are present"; - LibraryRootsPopupModel listPopupModel = new LibraryRootsPopupModel("Unsupported format", project, badRoots); - ListPopup popup = JBPopupFactory.getInstance().createListPopup(listPopupModel); - popup.showUnderneathOf(label.get()); + LibraryRootsPopupModel listPopupModel = new LibraryRootsPopupModel("Unsupported format", project, badRoots); + ListPopup popup = JBPopupFactory.getInstance().createListPopup(listPopupModel); + popup.showUnderneathOf(label.get()); + + return null; + } + }, "Can't show all paths during index update"); } }; label.set(answer.createActionLabel(labelText, action));