diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java index 58f9bcd425de..68d0a04a3604 100644 --- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java +++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java @@ -116,6 +116,6 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo @Override public boolean isDumbAware() { - return FileBasedIndex.indexAccessDuringDumbModeEnabled(); + return FileBasedIndex.isIndexAccessDuringDumbModeEnabled(); } } \ No newline at end of file diff --git a/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java index 38ed004395c0..68b1de5ee559 100644 --- a/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java @@ -220,7 +220,7 @@ public abstract class FileBasedIndex { public static final boolean ourSnapshotMappingsEnabled = SystemProperties.getBooleanProperty("idea.index.snapshot.mappings.enabled", true); @ApiStatus.Internal - public static boolean indexAccessDuringDumbModeEnabled() { + public static boolean isIndexAccessDuringDumbModeEnabled() { return ApplicationManager.getApplication().isInternal() && !ourDisableIndexAccessDuringDumbMode; } private static final boolean ourDisableIndexAccessDuringDumbMode = SystemProperties.getBooleanProperty("idea.disable.index.access.during.dumb.mode", false); diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java index 43f5f098ab0e..1c277c44a7e0 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java @@ -1057,10 +1057,10 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { () -> FileBasedIndex.getInstance().processFilesContainingAllKeys(IdIndex.NAME, keys, scope, checker, processor); Boolean[] result = {null}; - if (FileBasedIndex.indexAccessDuringDumbModeEnabled()) { - ReadAction.run(() -> { + if (FileBasedIndex.isIndexAccessDuringDumbModeEnabled()) { + ReadAction.nonBlocking(() -> { FileBasedIndex.getInstance().ignoreDumbMode(() -> result[0] = query.compute(), project); - }); + }).executeSynchronously(); } return result[0] != null ? result[0] : DumbService.getInstance(project).runReadActionInSmartMode(query); } diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java index b686361ae8b2..563a6b858386 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java @@ -401,7 +401,7 @@ class FindInProjectTask { private Set getFilesForFastWordSearch() { String stringToFind = myStringToFindInIndices; - if (stringToFind.isEmpty() || (DumbService.getInstance(myProject).isDumb() && !FileBasedIndex.indexAccessDuringDumbModeEnabled())) { + if (stringToFind.isEmpty() || (DumbService.getInstance(myProject).isDumb() && !FileBasedIndex.isIndexAccessDuringDumbModeEnabled())) { return Collections.emptySet(); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index 344a0764dd59..a64a2fa9ae9b 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -1193,7 +1193,10 @@ public final class FileBasedIndexImpl extends FileBasedIndex { @Override public void ignoreDumbMode(@NotNull Runnable runnable, @NotNull Project project) { assert ApplicationManager.getApplication().isReadAccessAllowed(); - if (DumbService.isDumb(project) && FileBasedIndex.indexAccessDuringDumbModeEnabled()) { + if (FileBasedIndex.isIndexAccessDuringDumbModeEnabled()) { + if (ourDumbModeIgnored.get() != null) { + throw new AssertionError("Nested index access in dumb mode"); + } ourDumbModeIgnored.set(Boolean.TRUE); try { runnable.run();