AnalysisActions should not traverse files under selection in update (IDEA-126494)

This commit is contained in:
Chuck Jazdzewski
2014-06-25 20:57:31 +02:00
committed by Anna Kozlova
parent d7440f731c
commit f30e993603
2 changed files with 25 additions and 19 deletions
@@ -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<VirtualFile>();
accept(createFileSearcher());
}
else if (myType == VIRTUAL_FILES) {
final HashSet<VirtualFile> files = new HashSet<VirtualFile>();
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
for (Iterator<VirtualFile> 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);
}
}
@@ -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<VirtualFile> files = new HashSet<VirtualFile>();
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<VirtualFile> files) {
VfsUtilCore.visitChildrenRecursively(vFile, new VirtualFileVisitor() {
@Override
public boolean visitFile(@NotNull VirtualFile file) {
if (!file.isDirectory()) {
files.add(file);
}
return true;
}
});
}
}