mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Split PsiSearchHelper and PsiTodoSearchHelper
This commit is contained in:
@@ -233,7 +233,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
}
|
||||
|
||||
public void testAddExcludeRoot() throws Exception{
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
|
||||
ProjectRootManagerEx rootManager = (ProjectRootManagerEx)ProjectRootManager.getInstance(myProject);
|
||||
final VirtualFile root = rootManager.getContentRoots()[0];
|
||||
@@ -292,7 +292,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
});
|
||||
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
@@ -304,7 +304,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
@@ -352,7 +352,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
@@ -379,7 +379,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
final ModuleRootManager rootManager = ModuleRootManager.getInstance(myModule);
|
||||
final VirtualFile root = rootManager.getContentRoots()[0];
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
@@ -391,7 +391,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
@@ -466,7 +466,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
ProjectRootManagerEx rootManager = (ProjectRootManagerEx)ProjectRootManager.getInstance(myProject);
|
||||
final VirtualFile root = rootManager.getContentRoots()[0];
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to initialize caches
|
||||
|
||||
new WriteCommandAction.Simple(getProject()) {
|
||||
@Override
|
||||
@@ -478,7 +478,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
|
||||
PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
PsiTodoSearchHelper.SERVICE.getInstance(myProject).findFilesWithTodoItems(); // to update caches
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
@@ -530,7 +530,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
}
|
||||
|
||||
private void checkTodos(@NonNls String[] expectedFiles){
|
||||
PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(myProject);
|
||||
PsiTodoSearchHelper helper = PsiTodoSearchHelper.SERVICE.getInstance(myProject);
|
||||
|
||||
PsiFile[] files = helper.findFilesWithTodoItems();
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
*
|
||||
* Use {@link com.intellij.psi.search.PsiSearchHelper.SERVICE#getInstance}() to get a search helper instance.
|
||||
*/
|
||||
public interface PsiSearchHelper extends PsiTodoSearchHelper {
|
||||
public interface PsiSearchHelper {
|
||||
class SERVICE {
|
||||
private SERVICE() {
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.intellij.psi.search;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -24,6 +26,15 @@ import org.jetbrains.annotations.NotNull;
|
||||
* Time: 10:08 AM
|
||||
*/
|
||||
public interface PsiTodoSearchHelper {
|
||||
class SERVICE {
|
||||
private SERVICE() {
|
||||
}
|
||||
|
||||
public static PsiTodoSearchHelper getInstance(Project project) {
|
||||
return ServiceManager.getService(project, PsiTodoSearchHelper.class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of all files in the project which have to do items.
|
||||
*
|
||||
|
||||
+2
-2
@@ -61,7 +61,7 @@ import com.intellij.problems.WolfTheProblemSolver;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
||||
import com.intellij.psi.impl.source.tree.injected.Place;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -778,7 +778,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
|
||||
@NotNull ProperTextRange priorityRange,
|
||||
@NotNull Collection<HighlightInfo> result,
|
||||
@NotNull Collection<HighlightInfo> outsideResult) {
|
||||
PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(file.getProject());
|
||||
PsiTodoSearchHelper helper = PsiTodoSearchHelper.SERVICE.getInstance(file.getProject());
|
||||
TodoItem[] todoItems = helper.findTodoItems(file, startOffset, endOffset);
|
||||
if (todoItems.length == 0) return;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ package com.intellij.ide.todo;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoPattern;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -52,7 +52,7 @@ public class TodoFilter implements Cloneable{
|
||||
* @return <code>true</code> if and only if specified <code>psiFile</code> has
|
||||
* <code>TodoItem</code>s accepted by the filter.
|
||||
*/
|
||||
public boolean accept(PsiSearchHelper searchHelper,PsiFile psiFile){
|
||||
public boolean accept(PsiTodoSearchHelper searchHelper,PsiFile psiFile){
|
||||
for(Iterator<TodoPattern> i=iterator();i.hasNext();){
|
||||
TodoPattern todoPattern= i.next();
|
||||
if(searchHelper.getTodoItemsCount(psiFile,todoPattern)>0){
|
||||
|
||||
@@ -42,7 +42,7 @@ import com.intellij.openapi.vcs.FileStatusListener;
|
||||
import com.intellij.openapi.vcs.FileStatusManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.usageView.UsageTreeColorsScheme;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
@@ -77,7 +77,7 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder {
|
||||
|
||||
protected final HashMap<VirtualFile, EditorHighlighter> myFile2Highlighter;
|
||||
|
||||
protected final PsiSearchHelper mySearchHelper;
|
||||
protected final PsiTodoSearchHelper mySearchHelper;
|
||||
/**
|
||||
* If this flag is false then the updateTree() method does nothing. But when
|
||||
* the flag becomes true and myDirtyFileSet isn't empty the update is invoked.
|
||||
@@ -99,7 +99,7 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder {
|
||||
myFile2Highlighter = new HashMap<VirtualFile, EditorHighlighter>();
|
||||
|
||||
PsiManager psiManager = PsiManager.getInstance(myProject);
|
||||
mySearchHelper = PsiSearchHelper.SERVICE.getInstance(myProject);
|
||||
mySearchHelper = PsiTodoSearchHelper.SERVICE.getInstance(myProject);
|
||||
psiManager.addPsiTreeChangeListener(new MyPsiTreeChangeListener());
|
||||
|
||||
myFileStatusListener = new MyFileStatusListener();
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.intellij.ide.util.treeView.NodeDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoPattern;
|
||||
|
||||
@@ -44,7 +43,7 @@ public abstract class TodoTreeStructure extends AbstractTreeStructureBase implem
|
||||
private boolean myAreModulesShown;
|
||||
|
||||
|
||||
protected final PsiSearchHelper mySearchHelper;
|
||||
protected final PsiTodoSearchHelper mySearchHelper;
|
||||
/**
|
||||
* Current <code>TodoFilter</code>. If no filter is set then this field is <code>null</code>.
|
||||
*/
|
||||
@@ -54,7 +53,7 @@ public abstract class TodoTreeStructure extends AbstractTreeStructureBase implem
|
||||
super(project);
|
||||
myArePackagesShown=true;
|
||||
mySummaryElement=new ToDoSummary();
|
||||
mySearchHelper= PsiSearchHelper.SERVICE.getInstance(project);
|
||||
mySearchHelper= PsiTodoSearchHelper.SERVICE.getInstance(project);
|
||||
}
|
||||
|
||||
final void setTreeBuilder(TodoTreeBuilder builder){
|
||||
|
||||
+3
-3
@@ -43,7 +43,7 @@ import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.search.LightIndexPatternSearch;
|
||||
import com.intellij.psi.impl.search.TodoItemsCreator;
|
||||
import com.intellij.psi.search.IndexPatternOccurrence;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
import com.intellij.psi.search.searches.IndexPatternSearch;
|
||||
import com.intellij.util.PairConsumer;
|
||||
@@ -65,7 +65,7 @@ public class TodoCheckinHandlerWorker {
|
||||
private final TodoFilter myTodoFilter;
|
||||
private final boolean myIncludePattern;
|
||||
private final PsiManager myPsiManager;
|
||||
private final PsiSearchHelper mySearchHelper;
|
||||
private final PsiTodoSearchHelper mySearchHelper;
|
||||
|
||||
private final List<TodoItem> myAddedOrEditedTodos;
|
||||
private final List<TodoItem> myInChangedTodos;
|
||||
@@ -81,7 +81,7 @@ public class TodoCheckinHandlerWorker {
|
||||
myTodoFilter = todoFilter;
|
||||
myIncludePattern = includePattern;
|
||||
myPsiManager = PsiManager.getInstance(project);
|
||||
mySearchHelper = PsiSearchHelper.SERVICE.getInstance(project);
|
||||
mySearchHelper = PsiTodoSearchHelper.SERVICE.getInstance(project);
|
||||
myAddedOrEditedTodos = new ArrayList<TodoItem>();
|
||||
myInChangedTodos = new ArrayList<TodoItem>();
|
||||
mySkipped = new SmartList<Pair<FilePath,String>>();
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.intellij.psi.impl.search;
|
||||
|
||||
import com.intellij.codeInsight.CommentUtil;
|
||||
import com.intellij.concurrency.JobUtil;
|
||||
import com.intellij.ide.todo.TodoIndexPatternProvider;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.application.ReadActionProcessor;
|
||||
@@ -28,7 +27,10 @@ import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.NullableComputable;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
@@ -38,7 +40,6 @@ import com.intellij.psi.impl.cache.impl.IndexCacheManagerImpl;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndex;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
|
||||
import com.intellij.psi.search.*;
|
||||
import com.intellij.psi.search.searches.IndexPatternSearch;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -60,7 +61,6 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.search.PsiSearchHelperImpl");
|
||||
|
||||
private final PsiManagerEx myManager;
|
||||
private static final TodoItem[] EMPTY_TODO_ITEMS = new TodoItem[0];
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
@@ -80,81 +80,6 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
myManager = manager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiFile[] findFilesWithTodoItems() {
|
||||
return CacheManager.SERVICE.getInstance(myManager.getProject()).getFilesWithTodoItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public TodoItem[] findTodoItems(@NotNull PsiFile file) {
|
||||
return findTodoItems(file, 0, file.getTextLength());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public TodoItem[] findTodoItems(@NotNull PsiFile file, int startOffset, int endOffset) {
|
||||
final Collection<IndexPatternOccurrence> occurrences = IndexPatternSearch.search(file, TodoIndexPatternProvider.getInstance()).findAll();
|
||||
if (occurrences.isEmpty()) {
|
||||
return EMPTY_TODO_ITEMS;
|
||||
}
|
||||
|
||||
return processTodoOccurences(startOffset, endOffset, occurrences);
|
||||
}
|
||||
|
||||
private TodoItem[] processTodoOccurences(int startOffset, int endOffset, Collection<IndexPatternOccurrence> occurrences) {
|
||||
List<TodoItem> items = new ArrayList<TodoItem>(occurrences.size());
|
||||
TextRange textRange = new TextRange(startOffset, endOffset);
|
||||
final TodoItemsCreator todoItemsCreator = new TodoItemsCreator();
|
||||
for(IndexPatternOccurrence occurrence: occurrences) {
|
||||
TextRange occurrenceRange = occurrence.getTextRange();
|
||||
if (textRange.contains(occurrenceRange)) {
|
||||
items.add(todoItemsCreator.createTodo(occurrence));
|
||||
}
|
||||
}
|
||||
|
||||
return items.toArray(new TodoItem[items.size()]);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TodoItem[] findTodoItemsLight(@NotNull PsiFile file) {
|
||||
return findTodoItemsLight(file, 0, file.getTextLength());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TodoItem[] findTodoItemsLight(@NotNull PsiFile file, int startOffset, int endOffset) {
|
||||
final Collection<IndexPatternOccurrence> occurrences =
|
||||
LightIndexPatternSearch.SEARCH.createQuery(new IndexPatternSearch.SearchParameters(file, TodoIndexPatternProvider.getInstance())).findAll();
|
||||
|
||||
if (occurrences.isEmpty()) {
|
||||
return EMPTY_TODO_ITEMS;
|
||||
}
|
||||
|
||||
return processTodoOccurences(startOffset, endOffset, occurrences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoItemsCount(@NotNull PsiFile file) {
|
||||
int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), TodoIndexPatternProvider.getInstance());
|
||||
if (count != -1) return count;
|
||||
return findTodoItems(file).length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoItemsCount(@NotNull PsiFile file, @NotNull TodoPattern pattern) {
|
||||
int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), pattern.getIndexPattern());
|
||||
if (count != -1) return count;
|
||||
TodoItem[] items = findTodoItems(file);
|
||||
count = 0;
|
||||
for (TodoItem item : items) {
|
||||
if (item.getPattern().equals(pattern)) count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiElement[] findCommentsContainingIdentifier(@NotNull String identifier, @NotNull SearchScope searchScope) {
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.intellij.psi.impl.search;
|
||||
|
||||
import com.intellij.ide.todo.TodoIndexPatternProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
|
||||
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.searches.IndexPatternSearch;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.search.PsiTodoSearchHelperImpl");
|
||||
|
||||
private final PsiManagerEx myManager;
|
||||
private static final TodoItem[] EMPTY_TODO_ITEMS = new TodoItem[0];
|
||||
|
||||
public PsiTodoSearchHelperImpl(PsiManagerEx manager) {
|
||||
myManager = manager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiFile[] findFilesWithTodoItems() {
|
||||
return CacheManager.SERVICE.getInstance(myManager.getProject()).getFilesWithTodoItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public TodoItem[] findTodoItems(@NotNull PsiFile file) {
|
||||
return findTodoItems(file, 0, file.getTextLength());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public TodoItem[] findTodoItems(@NotNull PsiFile file, int startOffset, int endOffset) {
|
||||
final Collection<IndexPatternOccurrence> occurrences = IndexPatternSearch.search(file, TodoIndexPatternProvider.getInstance()).findAll();
|
||||
if (occurrences.isEmpty()) {
|
||||
return EMPTY_TODO_ITEMS;
|
||||
}
|
||||
|
||||
return processTodoOccurences(startOffset, endOffset, occurrences);
|
||||
}
|
||||
|
||||
private TodoItem[] processTodoOccurences(int startOffset, int endOffset, Collection<IndexPatternOccurrence> occurrences) {
|
||||
List<TodoItem> items = new ArrayList<TodoItem>(occurrences.size());
|
||||
TextRange textRange = new TextRange(startOffset, endOffset);
|
||||
final TodoItemsCreator todoItemsCreator = new TodoItemsCreator();
|
||||
for(IndexPatternOccurrence occurrence: occurrences) {
|
||||
TextRange occurrenceRange = occurrence.getTextRange();
|
||||
if (textRange.contains(occurrenceRange)) {
|
||||
items.add(todoItemsCreator.createTodo(occurrence));
|
||||
}
|
||||
}
|
||||
|
||||
return items.toArray(new TodoItem[items.size()]);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TodoItem[] findTodoItemsLight(@NotNull PsiFile file) {
|
||||
return findTodoItemsLight(file, 0, file.getTextLength());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TodoItem[] findTodoItemsLight(@NotNull PsiFile file, int startOffset, int endOffset) {
|
||||
final Collection<IndexPatternOccurrence> occurrences =
|
||||
LightIndexPatternSearch.SEARCH.createQuery(new IndexPatternSearch.SearchParameters(file, TodoIndexPatternProvider.getInstance())).findAll();
|
||||
|
||||
if (occurrences.isEmpty()) {
|
||||
return EMPTY_TODO_ITEMS;
|
||||
}
|
||||
|
||||
return processTodoOccurences(startOffset, endOffset, occurrences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoItemsCount(@NotNull PsiFile file) {
|
||||
int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), TodoIndexPatternProvider.getInstance());
|
||||
if (count != -1) return count;
|
||||
return findTodoItems(file).length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoItemsCount(@NotNull PsiFile file, @NotNull TodoPattern pattern) {
|
||||
int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), pattern.getIndexPattern());
|
||||
if (count != -1) return count;
|
||||
TodoItem[] items = findTodoItems(file);
|
||||
count = 0;
|
||||
for (TodoItem item : items) {
|
||||
if (item.getPattern().equals(pattern)) count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private static ArrayList<IdIndexEntry> getWordEntries(String name, boolean caseSensitively) {
|
||||
List<String> words = StringUtil.getWordsInStringLongestFirst(name);
|
||||
final ArrayList<IdIndexEntry> keys = new ArrayList<IdIndexEntry>();
|
||||
for (String word : words) {
|
||||
keys.add(new IdIndexEntry(word, caseSensitively));
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -19,7 +19,7 @@ import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Getter;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
import com.intellij.util.Consumer;
|
||||
|
||||
@@ -51,7 +51,7 @@ public class TodoForBaseRevision extends TodoForRanges {
|
||||
protected TodoItem[] getTodoItems() {
|
||||
final TodoItem[] items = (TodoItem[])myGetter.get();
|
||||
if (items != null) return items;
|
||||
final TodoItem[] todoItems = getTodoForText(PsiSearchHelper.SERVICE.getInstance(myProject));
|
||||
final TodoItem[] todoItems = getTodoForText(PsiTodoSearchHelper.SERVICE.getInstance(myProject));
|
||||
if (todoItems != null) {
|
||||
mySaver.consume(todoItems);
|
||||
}
|
||||
|
||||
+2
-4
@@ -16,16 +16,14 @@
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
|
||||
import java.util.List;
|
||||
@@ -53,7 +51,7 @@ public class TodoForExistingFile extends TodoForRanges {
|
||||
return ApplicationManager.getApplication().runReadAction(new Computable<TodoItem[]>() {
|
||||
@Override
|
||||
public TodoItem[] compute() {
|
||||
final PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(myProject);
|
||||
final PsiTodoSearchHelper helper = PsiTodoSearchHelper.SERVICE.getInstance(myProject);
|
||||
|
||||
PsiFile psiFile = myFile == null ? null : PsiManager.getInstance(myProject).findFile(myFile);
|
||||
if (psiFile != null) {
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vcs.checkin.StepIntersection;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
|
||||
@@ -104,7 +104,7 @@ public abstract class TodoForRanges {
|
||||
|
||||
protected abstract TodoItem[] getTodoItems();
|
||||
|
||||
protected TodoItem[] getTodoForText(PsiSearchHelper helper) {
|
||||
protected TodoItem[] getTodoForText(PsiTodoSearchHelper helper) {
|
||||
final PsiFile psiFile = ApplicationManager.getApplication().runReadAction(new Computable<PsiFile>() {
|
||||
@Override
|
||||
public PsiFile compute() {
|
||||
|
||||
@@ -73,6 +73,9 @@
|
||||
<projectService serviceInterface="com.intellij.psi.search.PsiSearchHelper"
|
||||
serviceImplementation="com.intellij.psi.impl.search.PsiSearchHelperImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.search.PsiTodoSearchHelper"
|
||||
serviceImplementation="com.intellij.psi.impl.search.PsiTodoSearchHelperImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.codeInsight.lookup.LookupManager"
|
||||
serviceImplementation="com.intellij.codeInsight.lookup.impl.LookupManagerImpl"/>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ package com.siyeh.ig.maturity;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiComment;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
import com.intellij.psi.search.TodoItem;
|
||||
|
||||
public class TodoUtil {
|
||||
@@ -28,7 +28,7 @@ public class TodoUtil {
|
||||
|
||||
public static boolean isTodoComment(PsiComment comment) {
|
||||
final PsiFile file = comment.getContainingFile();
|
||||
final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(comment.getProject());
|
||||
final PsiTodoSearchHelper searchHelper = PsiTodoSearchHelper.SERVICE.getInstance(comment.getProject());
|
||||
final TodoItem[] todoItems = searchHelper.findTodoItems(file);
|
||||
for (final TodoItem todoItem : todoItems) {
|
||||
final TextRange commentTextRange = comment.getTextRange();
|
||||
|
||||
Reference in New Issue
Block a user