diff --git a/platform/lang-impl/src/com/intellij/ide/todo/ScopeBasedTodosTreeStructure.java b/platform/lang-impl/src/com/intellij/ide/todo/ScopeBasedTodosTreeStructure.java index 500e17b56534..f3f461b8281a 100644 --- a/platform/lang-impl/src/com/intellij/ide/todo/ScopeBasedTodosTreeStructure.java +++ b/platform/lang-impl/src/com/intellij/ide/todo/ScopeBasedTodosTreeStructure.java @@ -24,8 +24,8 @@ import com.intellij.ide.todo.nodes.ToDoRootNode; import com.intellij.ide.util.scopeChooser.ScopeChooserCombo; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; -import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.SearchScope; public class ScopeBasedTodosTreeStructure extends TodoTreeStructure { @@ -39,11 +39,10 @@ public class ScopeBasedTodosTreeStructure extends TodoTreeStructure { @Override public boolean accept(final PsiFile psiFile) { if (!psiFile.isValid()) return false; - boolean isAffected = false; + SearchScope scope = myScopes.getSelectedScope(); - if (scope instanceof GlobalSearchScope) { - isAffected = ((GlobalSearchScope)scope).contains(psiFile.getVirtualFile()); - } + VirtualFile file = psiFile.getVirtualFile(); + boolean isAffected = scope != null && file != null && scope.contains(file); return isAffected && (myTodoFilter != null && myTodoFilter.accept(mySearchHelper, psiFile) || (myTodoFilter == null && mySearchHelper.getTodoItemsCount(psiFile) > 0)); } diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java index 1daf08b07d05..c3707b36be4a 100644 --- a/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java @@ -34,7 +34,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.fileEditor.OpenFileDescriptor; -import com.intellij.openapi.project.IndexNotReadyException; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.ui.Splitter; @@ -50,7 +50,10 @@ import com.intellij.ui.content.Content; import com.intellij.ui.treeStructure.Tree; import com.intellij.usageView.UsageInfo; import com.intellij.usages.impl.UsagePreviewPanel; -import com.intellij.util.*; +import com.intellij.util.Alarm; +import com.intellij.util.EditSourceOnDoubleClickHandler; +import com.intellij.util.OpenSourceUtil; +import com.intellij.util.PlatformIcons; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -417,15 +420,11 @@ abstract class TodoPanel extends SimpleToolWindowPanel implements OccurenceNavig alarm.cancelAllRequests(); alarm.addRequest(() -> { final Set files = new HashSet<>(); - ApplicationManager.getApplication().runReadAction(() -> { - try { - myTodoTreeBuilder.collectFiles(virtualFile -> { - files.add(virtualFile); - return true; - }); - } - catch (IndexNotReadyException ignore) { - } + DumbService.getInstance(myProject).runReadActionInSmartMode(() -> { + myTodoTreeBuilder.collectFiles(virtualFile -> { + files.add(virtualFile); + return true; + }); }); final Runnable runnable = () -> { myTodoTreeBuilder.rebuildCache(files);