From e042d2e04177015fbcdd7d93736656997fb86cbf Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 7 Dec 2011 15:51:38 +0400 Subject: [PATCH] fix perf problem --- .../src/com/intellij/psi/impl/cache/CacheManager.java | 2 +- .../psi/impl/cache/impl/IndexCacheManagerImpl.java | 11 ++++++----- .../intellij/psi/impl/search/PsiSearchHelperImpl.java | 3 +-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java index 3c89dc5f91d7..cc945d7ea04a 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java @@ -43,7 +43,7 @@ public interface CacheManager { // IMPORTANT!!! // Do not call indices directly or indirectly from 'process' method, deadlocks are possible (IDEADEV-42137). - public void collectVirtualFilesWithWord(@NotNull final CommonProcessors.CollectProcessor fileProcessor, + public boolean collectVirtualFilesWithWord(@NotNull final CommonProcessors.CollectProcessor fileProcessor, @NotNull final String word, final short occurrenceMask, @NotNull final GlobalSearchScope scope, final boolean caseSensitively); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java index 7389cdcf7852..1d1a6fe5bfd7 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java @@ -27,6 +27,7 @@ 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; import com.intellij.psi.PsiManager; @@ -81,18 +82,18 @@ public class IndexCacheManagerImpl implements CacheManager{ // we cannot call it inside FileBasedIndex.processValues() method except in collecting form // If we do, deadlocks are possible (IDEADEV-42137). Process the files without not holding indices' read lock. @Override - public void collectVirtualFilesWithWord(@NotNull final CommonProcessors.CollectProcessor fileProcessor, + public boolean collectVirtualFilesWithWord(@NotNull final CommonProcessors.CollectProcessor fileProcessor, @NotNull final String word, final short occurrenceMask, @NotNull final GlobalSearchScope scope, final boolean caseSensitively) { if (myProject.isDefault()) { - return; + return true; } try { - ApplicationManager.getApplication().runReadAction(new Runnable() { + return ApplicationManager.getApplication().runReadAction(new Computable() { @Override - public void run() { - FileBasedIndex.getInstance().processValues(IdIndex.NAME, new IdIndexEntry(word, caseSensitively), null, new FileBasedIndex.ValueProcessor() { + public Boolean compute() { + return FileBasedIndex.getInstance().processValues(IdIndex.NAME, new IdIndexEntry(word, caseSensitively), null, new FileBasedIndex.ValueProcessor() { final FileIndexFacade index = FileIndexFacade.getInstance(myProject); @Override public boolean process(final VirtualFile file, final Integer value) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java index 992419927e8a..14bdaa670bd6 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java @@ -413,14 +413,13 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { final String lastWord = words.get(words.size() - 1); if (processor instanceof CommonProcessors.CollectProcessor) { final CommonProcessors.CollectProcessor collectProcessor = (CommonProcessors.CollectProcessor)processor; - cacheManager.collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor(collectProcessor.getResults()) { + return cacheManager.collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor(collectProcessor.getResults()) { @Override public boolean process(VirtualFile virtualFile) { if (fileSet == null || fileSet.contains(virtualFile)) return collectProcessor.process(virtualFile); return true; } }, lastWord, searchContext, scope, caseSensitively); - return true; } else { THashSet files = new THashSet(); cacheManager.collectVirtualFilesWithWord(new CommonProcessors.CollectProcessor(files) {