diff options
Diffstat (limited to 'platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java')
-rw-r--r-- | platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java index 6d7ce9c07a14..b9fc77295d62 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java @@ -33,9 +33,8 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; +import com.intellij.psi.PsiElement; +import com.intellij.psi.search.*; import com.intellij.psi.util.PsiUtilCore; import com.intellij.ui.content.Content; import com.intellij.usageView.UsageViewBundle; @@ -122,23 +121,23 @@ public class UsageViewManagerImpl extends UsageViewManager { @NotNull final UsageViewPresentation presentation, @NotNull final FindUsagesProcessPresentation processPresentation, @Nullable final UsageViewStateListener listener) { - final SearchScope searchScope = getSearchScope(searchFor); + final SearchScope searchScope = getMaxSearchScopeToWarnOfFallingOutOf(searchFor); return doSearchAndShow(searchFor, searcherFactory, presentation, processPresentation, listener, searchScope); } - UsageView doSearchAndShow(@NotNull final UsageTarget[] searchFor, + private UsageView doSearchAndShow(@NotNull final UsageTarget[] searchFor, @NotNull final Factory<UsageSearcher> searcherFactory, @NotNull final UsageViewPresentation presentation, @NotNull final FindUsagesProcessPresentation processPresentation, @Nullable final UsageViewStateListener listener, - @NotNull final SearchScope searchScope) { + @NotNull final SearchScope searchScopeToWarnOfFallingOutOf) { final AtomicReference<UsageViewImpl> usageViewRef = new AtomicReference<UsageViewImpl>(); Task.Backgroundable task = new Task.Backgroundable(myProject, getProgressTitle(presentation), true, new SearchInBackgroundOption()) { @Override public void run(@NotNull final ProgressIndicator indicator) { new SearchForUsagesRunnable(UsageViewManagerImpl.this, UsageViewManagerImpl.this.myProject, usageViewRef, presentation, searchFor, searcherFactory, - processPresentation, searchScope, listener).run(); + processPresentation, searchScopeToWarnOfFallingOutOf, listener).run(); } @NotNull @@ -159,7 +158,7 @@ public class UsageViewManagerImpl extends UsageViewManager { } @NotNull - private SearchScope getSearchScope(@NotNull UsageTarget[] searchFor) { + private SearchScope getMaxSearchScopeToWarnOfFallingOutOf(@NotNull UsageTarget[] searchFor) { UsageTarget target = searchFor[0]; if (target instanceof TypeSafeDataProvider) { final SearchScope[] scope = new SearchScope[1]; @@ -171,7 +170,7 @@ public class UsageViewManagerImpl extends UsageViewManager { }); return scope[0]; } - return GlobalSearchScope.projectScope(myProject); + return GlobalSearchScope.allScope(myProject); // by default do not warn of falling out of scope } @Override @@ -262,10 +261,27 @@ public class UsageViewManagerImpl extends UsageViewManager { } public static boolean isInScope(@NotNull Usage usage, @NotNull SearchScope searchScope) { - VirtualFile file = usage instanceof UsageInFile ? ((UsageInFile)usage).getFile() : usage instanceof PsiElementUsage ? PsiUtilCore - .getVirtualFile(((PsiElementUsage)usage).getElement()) : null; - return file != null && (searchScope instanceof LocalSearchScope - ? ((LocalSearchScope)searchScope).isInScope(file) : ((GlobalSearchScope)searchScope).contains(file)); + PsiElement element = null; + VirtualFile file = usage instanceof UsageInFile ? ((UsageInFile)usage).getFile() : + usage instanceof PsiElementUsage ? PsiUtilCore.getVirtualFile(element = ((PsiElementUsage)usage).getElement()) : null; + if (file != null) { + return isFileInScope(file, searchScope); + } + else if(element != null) { + return searchScope instanceof EverythingGlobalScope || + searchScope instanceof ProjectScopeImpl || + searchScope instanceof ProjectAndLibrariesScope; + } + return false; + } + + private static boolean isFileInScope(@NotNull VirtualFile file, @NotNull SearchScope searchScope) { + if (searchScope instanceof LocalSearchScope) { + return ((LocalSearchScope)searchScope).isInScope(file); + } + else { + return ((GlobalSearchScope)searchScope).contains(file); + } } @NotNull |