RUBY-32066 add support for indexing __todo__ and including them inside the todo toolwindow

GitOrigin-RevId: ded92634b23201afdedfe07308795639b298bd1e
This commit is contained in:
Henry Wylde
2023-11-28 01:27:55 +00:00
committed by intellij-monorepo-bot
parent 275a2aee05
commit 874b7d0da1
@@ -2,16 +2,12 @@
package com.intellij.psi.impl.search;
import com.intellij.ide.todo.TodoConfiguration;
import com.intellij.ide.todo.TodoIndexPatternProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.cache.TodoCacheManager;
import com.intellij.psi.search.IndexPatternOccurrence;
import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.psi.search.TodoPattern;
import com.intellij.psi.search.*;
import com.intellij.psi.search.searches.IndexPatternSearch;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.CommonProcessors;
@@ -48,8 +44,11 @@ public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
@Override
public TodoItem @NotNull [] findTodoItems(@NotNull PsiFile file, int startOffset, int endOffset) {
final Collection<IndexPatternOccurrence> occurrences =
IndexPatternSearch.search(file, TodoIndexPatternProvider.getInstance(), TodoConfiguration.getInstance().isMultiLine()).findAll();
final Collection<IndexPatternOccurrence> occurrences = new ArrayList<>();
for (IndexPatternProvider provider : IndexPatternProvider.EP_NAME.getExtensionList()) {
IndexPatternSearch.search(file, provider, TodoConfiguration.getInstance().isMultiLine()).forEach(occurrences::add);
}
if (occurrences.isEmpty()) {
return EMPTY_TODO_ITEMS;
}
@@ -81,10 +80,12 @@ public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
@Override
public TodoItem @NotNull [] findTodoItemsLight(@NotNull PsiFile file, int startOffset, int endOffset) {
final Collection<IndexPatternOccurrence> occurrences =
final Collection<IndexPatternOccurrence> occurrences = new ArrayList<>();
for (IndexPatternProvider provider : IndexPatternProvider.EP_NAME.getExtensionList()) {
LightIndexPatternSearch.SEARCH.createQuery(
new IndexPatternSearch.SearchParameters(file, TodoIndexPatternProvider.getInstance(), TodoConfiguration.getInstance().isMultiLine())
).findAll();
new IndexPatternSearch.SearchParameters(file, provider, TodoConfiguration.getInstance().isMultiLine())
).forEach(occurrences::add);
}
if (occurrences.isEmpty()) {
return EMPTY_TODO_ITEMS;
@@ -96,11 +97,21 @@ public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
@Override
public int getTodoItemsCount(@NotNull PsiFile file) {
VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null) {
int count = TodoCacheManager.getInstance(myProject).getTodoCount(virtualFile, TodoIndexPatternProvider.getInstance());
if (count != -1) return count;
if (virtualFile == null) {
return 0;
}
return findTodoItems(file).length;
int total = 0;
for (IndexPatternProvider provider : IndexPatternProvider.EP_NAME.getExtensionList()) {
final int count = TodoCacheManager.getInstance(myProject).getTodoCount(virtualFile, provider);
if (count == -1) {
return findTodoItems(file).length;
}
total += count;
}
return total;
}
@Override