diff --git a/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java b/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java index dac770921aa5..f1255edc01f6 100644 --- a/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java +++ b/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java @@ -38,6 +38,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileFilter; +import com.intellij.openapi.vfs.VirtualFileVisitor; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScopesCore; @@ -239,6 +240,29 @@ public class AnalysisScope { myFilesSet = new HashSet(); accept(createFileSearcher()); } + else if (myType == VIRTUAL_FILES) { + final HashSet files = new HashSet(); + final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); + for (Iterator iterator = myFilesSet.iterator(); iterator.hasNext(); ) { + final VirtualFile vFile = iterator.next(); + VfsUtilCore.visitChildrenRecursively(vFile, new VirtualFileVisitor() { + @NotNull + @Override + public Result visitFileEx(@NotNull VirtualFile file) { + boolean ignored = fileIndex.isIgnored(file); + if (!ignored && !file.isDirectory()) { + files.add(file); + } + return ignored ? SKIP_CHILDREN : CONTINUE; + } + }); + + if (vFile.isDirectory()) { + iterator.remove(); + } + } + myFilesSet.addAll(files); + } } diff --git a/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisAction.java b/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisAction.java index aaebe0d7892c..c63f8cdc2fd7 100644 --- a/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisAction.java +++ b/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisAction.java @@ -17,7 +17,6 @@ package com.intellij.analysis; import com.intellij.ide.highlighter.ArchiveFileType; -import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileDocumentManager; @@ -29,9 +28,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileVisitor; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -177,11 +174,7 @@ public abstract class BaseAnalysisAction extends AnAction { Set files = new HashSet(); for (VirtualFile vFile : virtualFiles) { if (fileIndex.isInContent(vFile)) { - if (vFile instanceof VirtualFileWindow) { - files.add(vFile); - vFile = ((VirtualFileWindow)vFile).getDelegate(); - } - collectFilesUnder(vFile, files); + files.add(vFile); } } return new AnalysisScope(project, files); @@ -208,15 +201,4 @@ public abstract class BaseAnalysisAction extends AnAction { return null; } - private static void collectFilesUnder(@NotNull VirtualFile vFile, @NotNull final Set files) { - VfsUtilCore.visitChildrenRecursively(vFile, new VirtualFileVisitor() { - @Override - public boolean visitFile(@NotNull VirtualFile file) { - if (!file.isDirectory()) { - files.add(file); - } - return true; - } - }); - } }