mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Split CacheManager and TodoCacheManager. Also, split implementations
This commit is contained in:
+41
-35
@@ -12,6 +12,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.TodoCacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndex;
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndex;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -49,7 +50,7 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
}
|
||||
|
||||
public void testBuildCache() throws Exception {
|
||||
checkCache(CacheManager.SERVICE.getInstance(myProject));
|
||||
checkCache(CacheManager.SERVICE.getInstance(myProject), TodoCacheManager.SERVICE.getInstance(myProject));
|
||||
}
|
||||
|
||||
public void testLoadCacheNoTodo() throws Exception {
|
||||
@@ -62,7 +63,7 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
public void testUpdateCache1() throws Exception {
|
||||
myRootDir.createChildData(null, "4.java");
|
||||
Thread.sleep(1000);
|
||||
checkCache(CacheManager.SERVICE.getInstance(myProject));
|
||||
checkCache(CacheManager.SERVICE.getInstance(myProject), TodoCacheManager.SERVICE.getInstance(myProject));
|
||||
}
|
||||
|
||||
public void testUpdateCache2() throws Exception {
|
||||
@@ -73,6 +74,7 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
|
||||
final CacheManager cache = CacheManager.SERVICE.getInstance(myProject);
|
||||
final TodoCacheManager todocache = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
final GlobalSearchScope scope = GlobalSearchScope.projectScope(myProject);
|
||||
checkResult(new String[] {"1.java"}, convert(cache.getFilesWithWord("xxx", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{}, convert(cache.getFilesWithWord("a", UsageSearchContext.ANY, scope, false)));
|
||||
@@ -81,10 +83,10 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache.getFilesWithWord("d", UsageSearchContext.ANY,scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithWord("e", UsageSearchContext.ANY,scope, false)));
|
||||
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"3.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
public void testUpdateCache3() throws Exception {
|
||||
@@ -92,6 +94,7 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
child.delete(null);
|
||||
|
||||
final CacheManager cache2 = CacheManager.SERVICE.getInstance(myProject);
|
||||
final TodoCacheManager todocache2 = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
final GlobalSearchScope scope = GlobalSearchScope.projectScope(myProject);
|
||||
checkResult(ArrayUtil.EMPTY_STRING_ARRAY, convert(cache2.getFilesWithWord("xxx", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(ArrayUtil.EMPTY_STRING_ARRAY, convert(cache2.getFilesWithWord("a", UsageSearchContext.ANY, scope, false)));
|
||||
@@ -100,9 +103,9 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache2.getFilesWithWord("d", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache2.getFilesWithWord("e", UsageSearchContext.ANY, scope, false)));
|
||||
|
||||
checkResult(new String[]{"3.java"}, convert(cache2.getFilesWithTodoItems()));
|
||||
assertEquals(0, cache2.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache2.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"3.java"}, convert(todocache2.getFilesWithTodoItems()));
|
||||
assertEquals(0, todocache2.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache2.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
public void testUpdateCacheNoTodo() throws Exception {
|
||||
@@ -118,11 +121,11 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
TodoConfiguration.getInstance().setTodoPatterns(new TodoPattern[]{pattern});
|
||||
|
||||
try{
|
||||
final CacheManager cache = CacheManager.SERVICE.getInstance(myProject);
|
||||
checkResult(new String[]{"2.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(1, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
final TodoCacheManager todocache = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
checkResult(new String[]{"2.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(1, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
finally{
|
||||
TodoConfiguration.getInstance().setTodoPatterns(oldPatterns);
|
||||
@@ -131,11 +134,12 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
|
||||
public void testFileModification() throws Exception {
|
||||
final CacheManager cache = CacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache);
|
||||
final TodoCacheManager todocache = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache, todocache);
|
||||
|
||||
VirtualFile child = myRootDir.findChild("1.java");
|
||||
|
||||
checkCache(cache);
|
||||
checkCache(cache, todocache);
|
||||
|
||||
VfsUtil.saveText(child, "xxx");
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
@@ -148,15 +152,16 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache.getFilesWithWord("d", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithWord("e", UsageSearchContext.ANY, scope, false)));
|
||||
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"3.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
public void testFileDeletion() throws Exception {
|
||||
final CacheManager cache = CacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache);
|
||||
final TodoCacheManager todocache = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache, todocache);
|
||||
|
||||
VirtualFile child = myRootDir.findChild("1.java");
|
||||
child.delete(null);
|
||||
@@ -169,14 +174,15 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache.getFilesWithWord("d", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithWord("e", UsageSearchContext.ANY, scope, false)));
|
||||
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"3.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
public void testFileCreation() throws Exception {
|
||||
final CacheManager cache = CacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache);
|
||||
final TodoCacheManager todocache = TodoCacheManager.SERVICE.getInstance(myProject);
|
||||
checkCache(cache, todocache);
|
||||
|
||||
VirtualFile child = myRootDir.createChildData(null, "4.java");
|
||||
VfsUtil.saveText(child, "xxx //todo");
|
||||
@@ -190,11 +196,11 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache.getFilesWithWord("d", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithWord("e", UsageSearchContext.ANY, scope, false)));
|
||||
|
||||
checkResult(new String[]{"1.java", "3.java", "4.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(1, cache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(1, cache.getTodoCount(myRootDir.findChild("4.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"1.java", "3.java", "4.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(1, todocache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(1, todocache.getTodoCount(myRootDir.findChild("4.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
public void testCrash() throws Exception {
|
||||
@@ -203,7 +209,7 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
System.gc();
|
||||
}
|
||||
|
||||
private void checkCache(CacheManager cache) {
|
||||
private void checkCache(CacheManager cache, TodoCacheManager todocache) {
|
||||
final GlobalSearchScope scope = GlobalSearchScope.projectScope(myProject);
|
||||
checkResult(ArrayUtil.EMPTY_STRING_ARRAY, convert(cache.getFilesWithWord("xxx", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"1.java"}, convert(cache.getFilesWithWord("a", UsageSearchContext.ANY, scope, false)));
|
||||
@@ -212,10 +218,10 @@ public class IdCacheTest extends CodeInsightTestCase{
|
||||
checkResult(new String[]{"2.java", "3.java"}, convert(cache.getFilesWithWord("d", UsageSearchContext.ANY, scope, false)));
|
||||
checkResult(new String[]{"3.java"}, convert(cache.getFilesWithWord("e", UsageSearchContext.ANY, scope, false)));
|
||||
|
||||
checkResult(new String[]{"1.java", "3.java"}, convert(cache.getFilesWithTodoItems()));
|
||||
assertEquals(1, cache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, cache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, cache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
checkResult(new String[]{"1.java", "3.java"}, convert(todocache.getFilesWithTodoItems()));
|
||||
assertEquals(1, todocache.getTodoCount(myRootDir.findChild("1.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(0, todocache.getTodoCount(myRootDir.findChild("2.java"), TodoIndexPatternProvider.getInstance()));
|
||||
assertEquals(2, todocache.getTodoCount(myRootDir.findChild("3.java"), TodoIndexPatternProvider.getInstance()));
|
||||
}
|
||||
|
||||
private static VirtualFile[] convert(PsiFile[] psiFiles) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* 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.
|
||||
@@ -18,11 +18,8 @@ package com.intellij.psi.impl.cache;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
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.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
import com.intellij.util.Processor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -37,22 +34,6 @@ public interface CacheManager {
|
||||
}
|
||||
|
||||
@NotNull PsiFile[] getFilesWithWord(@NotNull String word, short occurenceMask, @NotNull GlobalSearchScope scope, final boolean caseSensitively);
|
||||
|
||||
boolean processFilesWithWord(@NotNull Processor<PsiFile> processor,@NotNull String word, short occurenceMask, @NotNull GlobalSearchScope scope, final boolean caseSensitively);
|
||||
|
||||
/**
|
||||
* @return all VirtualFile's that contain todo-items under project roots
|
||||
*/
|
||||
@NotNull PsiFile[] getFilesWithTodoItems();
|
||||
|
||||
/**
|
||||
* @return -1 if it's not known
|
||||
*/
|
||||
int getTodoCount(@NotNull VirtualFile file, final IndexPatternProvider patternProvider);
|
||||
|
||||
/**
|
||||
* @return -1 if it's not known
|
||||
*/
|
||||
int getTodoCount(@NotNull VirtualFile file, IndexPattern pattern);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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.cache;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface TodoCacheManager {
|
||||
class SERVICE {
|
||||
private SERVICE() {
|
||||
}
|
||||
|
||||
public static TodoCacheManager getInstance(Project project) {
|
||||
return ServiceManager.getService(project, TodoCacheManager.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return all VirtualFile's that contain todo-items under project roots
|
||||
*/
|
||||
@NotNull
|
||||
PsiFile[] getFilesWithTodoItems();
|
||||
|
||||
/**
|
||||
* @return -1 if it's not known
|
||||
*/
|
||||
int getTodoCount(@NotNull VirtualFile file, IndexPatternProvider patternProvider);
|
||||
|
||||
/**
|
||||
* @return -1 if it's not known
|
||||
*/
|
||||
int getTodoCount(@NotNull VirtualFile file, IndexPattern pattern);
|
||||
}
|
||||
+3
-77
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* 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.
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.psi.impl.cache.impl;
|
||||
|
||||
import com.intellij.injected.editor.VirtualFileWindow;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ReadActionProcessor;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -25,8 +24,6 @@ import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -34,18 +31,14 @@ import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndex;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndex;
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
@@ -142,71 +135,4 @@ public class IndexCacheManagerImpl implements CacheManager{
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiFile[] getFilesWithTodoItems() {
|
||||
if (myProject.isDefault()) {
|
||||
return PsiFile.EMPTY_ARRAY;
|
||||
}
|
||||
final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
|
||||
final Set<PsiFile> allFiles = new HashSet<PsiFile>();
|
||||
final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
for (IndexPattern indexPattern : IndexPatternUtil.getIndexPatterns()) {
|
||||
final Collection<VirtualFile> files = fileBasedIndex.getContainingFiles(
|
||||
TodoIndex.NAME,
|
||||
new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), GlobalSearchScope.allScope(myProject));
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (VirtualFile file : files) {
|
||||
if (projectFileIndex.isInContent(file)) {
|
||||
final PsiFile psiFile = myPsiManager.findFile(file);
|
||||
if (psiFile != null) {
|
||||
allFiles.add(psiFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return allFiles.isEmpty() ? PsiFile.EMPTY_ARRAY : PsiUtilCore.toPsiFileArray(allFiles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoCount(@NotNull final VirtualFile file, final IndexPatternProvider patternProvider) {
|
||||
if (myProject.isDefault()) {
|
||||
return 0;
|
||||
}
|
||||
if (file instanceof VirtualFileWindow) return -1;
|
||||
final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
|
||||
int count = 0;
|
||||
for (IndexPattern indexPattern : patternProvider.getIndexPatterns()) {
|
||||
count += fetchCount(fileBasedIndex, file, indexPattern);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoCount(@NotNull final VirtualFile file, final IndexPattern pattern) {
|
||||
if (myProject.isDefault()) {
|
||||
return 0;
|
||||
}
|
||||
if (file instanceof VirtualFileWindow) return -1;
|
||||
return fetchCount(FileBasedIndex.getInstance(), file, pattern);
|
||||
}
|
||||
|
||||
private int fetchCount(final FileBasedIndex fileBasedIndex, final VirtualFile file, final IndexPattern indexPattern) {
|
||||
final int[] count = {0};
|
||||
fileBasedIndex.processValues(
|
||||
TodoIndex.NAME, new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), file,
|
||||
new FileBasedIndex.ValueProcessor<Integer>() {
|
||||
@Override
|
||||
public boolean process(final VirtualFile file, final Integer value) {
|
||||
count[0] += value.intValue();
|
||||
return true;
|
||||
}
|
||||
}, GlobalSearchScope.fileScope(myProject, file));
|
||||
return count[0];
|
||||
}
|
||||
}
|
||||
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 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.cache.impl;
|
||||
|
||||
import com.intellij.injected.editor.VirtualFileWindow;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.cache.TodoCacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndex;
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
* Date: Jan 16, 2008
|
||||
*/
|
||||
public class IndexTodoCacheManagerImpl implements TodoCacheManager {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.cache.impl.IndexTodoCacheManagerImpl");
|
||||
private final Project myProject;
|
||||
private final PsiManager myPsiManager;
|
||||
|
||||
public IndexTodoCacheManagerImpl(PsiManager psiManager) {
|
||||
myPsiManager = psiManager;
|
||||
myProject = psiManager.getProject();
|
||||
}
|
||||
|
||||
public static boolean shouldBeFound(GlobalSearchScope scope, VirtualFile virtualFile, FileIndexFacade index) {
|
||||
return (scope.isSearchOutsideRootModel() || index.isInContent(virtualFile) || index.isInLibrarySource(virtualFile)) && !virtualFile.getFileType().isBinary();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiFile[] getFilesWithTodoItems() {
|
||||
if (myProject.isDefault()) {
|
||||
return PsiFile.EMPTY_ARRAY;
|
||||
}
|
||||
final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
|
||||
final Set<PsiFile> allFiles = new HashSet<PsiFile>();
|
||||
final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
|
||||
for (IndexPattern indexPattern : IndexPatternUtil.getIndexPatterns()) {
|
||||
final Collection<VirtualFile> files = fileBasedIndex.getContainingFiles(
|
||||
TodoIndex.NAME,
|
||||
new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), GlobalSearchScope.allScope(myProject));
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (VirtualFile file : files) {
|
||||
if (projectFileIndex.isInContent(file)) {
|
||||
final PsiFile psiFile = myPsiManager.findFile(file);
|
||||
if (psiFile != null) {
|
||||
allFiles.add(psiFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return allFiles.isEmpty() ? PsiFile.EMPTY_ARRAY : PsiUtilCore.toPsiFileArray(allFiles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoCount(@NotNull final VirtualFile file, final IndexPatternProvider patternProvider) {
|
||||
if (myProject.isDefault()) {
|
||||
return 0;
|
||||
}
|
||||
if (file instanceof VirtualFileWindow) return -1;
|
||||
final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
|
||||
int count = 0;
|
||||
for (IndexPattern indexPattern : patternProvider.getIndexPatterns()) {
|
||||
count += fetchCount(fileBasedIndex, file, indexPattern);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTodoCount(@NotNull final VirtualFile file, final IndexPattern pattern) {
|
||||
if (myProject.isDefault()) {
|
||||
return 0;
|
||||
}
|
||||
if (file instanceof VirtualFileWindow) return -1;
|
||||
return fetchCount(FileBasedIndex.getInstance(), file, pattern);
|
||||
}
|
||||
|
||||
private int fetchCount(final FileBasedIndex fileBasedIndex, final VirtualFile file, final IndexPattern indexPattern) {
|
||||
final int[] count = {0};
|
||||
fileBasedIndex.processValues(
|
||||
TodoIndex.NAME, new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), file,
|
||||
new FileBasedIndex.ValueProcessor<Integer>() {
|
||||
@Override
|
||||
public boolean process(final VirtualFile file, final Integer value) {
|
||||
count[0] += value.intValue();
|
||||
return true;
|
||||
}
|
||||
}, GlobalSearchScope.fileScope(myProject, file));
|
||||
return count[0];
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.intellij.psi.impl.search;
|
||||
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.TodoCacheManager;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
import com.intellij.psi.search.searches.IndexPatternSearch;
|
||||
@@ -32,14 +32,14 @@ class IndexPatternSearchImpl extends IndexPatternSearch {
|
||||
|
||||
@Override
|
||||
protected int getOccurrencesCountImpl(PsiFile file, IndexPatternProvider provider) {
|
||||
int count = CacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), provider);
|
||||
int count = TodoCacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), provider);
|
||||
if (count != -1) return count;
|
||||
return search(file, provider).findAll().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getOccurrencesCountImpl(PsiFile file, IndexPattern pattern) {
|
||||
int count = CacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), pattern);
|
||||
int count = TodoCacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), pattern);
|
||||
if (count != -1) return count;
|
||||
return search(file, pattern).findAll().size();
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.cache.CacheManager;
|
||||
import com.intellij.psi.impl.cache.TodoCacheManager;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
import com.intellij.psi.search.IndexPatternOccurrence;
|
||||
import com.intellij.psi.search.IndexPatternProvider;
|
||||
@@ -60,7 +60,7 @@ public class IndexPatternSearcher implements QueryExecutor<IndexPatternOccurrenc
|
||||
return true;
|
||||
}
|
||||
|
||||
final CacheManager cacheManager = CacheManager.SERVICE.getInstance(file.getProject());
|
||||
final TodoCacheManager cacheManager = TodoCacheManager.SERVICE.getInstance(file.getProject());
|
||||
final IndexPatternProvider patternProvider = queryParameters.getPatternProvider();
|
||||
int count = patternProvider != null
|
||||
? cacheManager.getTodoCount(virtualFile, patternProvider)
|
||||
|
||||
@@ -22,7 +22,7 @@ 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.TodoCacheManager;
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
|
||||
import com.intellij.psi.search.IndexPatternOccurrence;
|
||||
import com.intellij.psi.search.PsiTodoSearchHelper;
|
||||
@@ -48,7 +48,7 @@ public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiFile[] findFilesWithTodoItems() {
|
||||
return CacheManager.SERVICE.getInstance(myManager.getProject()).getFilesWithTodoItems();
|
||||
return TodoCacheManager.SERVICE.getInstance(myManager.getProject()).getFilesWithTodoItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,14 +103,14 @@ public class PsiTodoSearchHelperImpl implements PsiTodoSearchHelper {
|
||||
|
||||
@Override
|
||||
public int getTodoItemsCount(@NotNull PsiFile file) {
|
||||
int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), TodoIndexPatternProvider.getInstance());
|
||||
int count = TodoCacheManager.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());
|
||||
int count = TodoCacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), pattern.getIndexPattern());
|
||||
if (count != -1) return count;
|
||||
TodoItem[] items = findTodoItems(file);
|
||||
count = 0;
|
||||
|
||||
@@ -299,6 +299,8 @@
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.impl.cache.CacheManager"
|
||||
serviceImplementation="com.intellij.psi.impl.cache.impl.IndexCacheManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.psi.impl.cache.TodoCacheManager"
|
||||
serviceImplementation="com.intellij.psi.impl.cache.impl.IndexTodoCacheManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.psi.impl.ResolveScopeManager"
|
||||
serviceImplementation="com.intellij.psi.impl.file.impl.ResolveScopeManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.openapi.roots.ProjectFileIndex"
|
||||
|
||||
Reference in New Issue
Block a user