final Collection<PsiFile> psiFiles = getFilesToSearchIn(findModel, project, psiDirectory);
try {
- final SearchScope customScope = findModel.getCustomScope();
final Set<PsiFile> largeFiles = new THashSet<PsiFile>();
int i = 0;
if (fastWords.getFirst() && canOptimizeForFastWordSearch(findModel)) return filesForFastWordSearch;
- final SearchScope customScope = findModel.getCustomScope();
+ final GlobalSearchScope customScope = toGlobal(project, findModel.getCustomScope());
class EnumContentIterator implements ContentIterator {
final List<PsiFile> myFiles = new ArrayList<PsiFile>(filesForFastWordSearch);
@Override
public boolean processFile(VirtualFile virtualFile) {
- if (!virtualFile.isDirectory() && (fileMaskRegExp == null || fileMaskRegExp.matcher(virtualFile.getName()).matches()) && (!(customScope instanceof GlobalSearchScope) || ((GlobalSearchScope)customScope).contains(virtualFile))) {
+ if (!virtualFile.isDirectory() &&
+ (fileMaskRegExp == null || fileMaskRegExp.matcher(virtualFile.getName()).matches()) &&
+ (customScope == null || customScope.contains(virtualFile))) {
final PsiFile psiFile = psiManager.findFile(virtualFile);
if (psiFile != null && !filesForFastWordSearch.contains(psiFile)) {
myFiles.add(psiFile);
return true;
}
+ @Nullable
+ private static GlobalSearchScope toGlobal(Project project, @Nullable SearchScope scope) {
+ if (scope instanceof GlobalSearchScope) {
+ return (GlobalSearchScope)scope;
+ }
+ Set<VirtualFile> files = new HashSet<VirtualFile>();
+ for (PsiElement element : ((LocalSearchScope)scope).getScope()) {
+ PsiFile file = element.getContainingFile();
+ if (file != null) {
+ ContainerUtil.addIfNotNull(files, file.getVirtualFile());
+ }
+ }
+ return GlobalSearchScope.filesScope(project, files);
+ }
+
@NotNull
private static Pair<Boolean, Collection<PsiFile>> getFilesForFastWordSearch(final FindModel findModel, final Project project,
final PsiDirectory psiDirectory, final Pattern fileMaskRegExp,