multi selection & number of entries

This commit is contained in:
Anna Kozlova
2005-01-21 21:53:28 +03:00
parent 00dd69384d
commit 2992147241
9 changed files with 74 additions and 12 deletions
@@ -11,18 +11,17 @@ package com.intellij.analysis;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.impl.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.ArrayUtil;
import java.io.File;
import java.util.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class AnalysisScope {
private static final Logger LOG = Logger.getInstance("#com.intellij.analysis.AnalysisScope");
@@ -33,9 +32,11 @@ public class AnalysisScope {
public static final int MODULE = 4;
public static final int PACKAGE = 5;
public static final int INVALID = 6;
public static final int MODULES = 7;
private final Project myProject;
private PsiFileFilter myFilter;
private final List<Module> myModules;
private final Module myModule;
private final PsiElement myElement;
private final int myType;
@@ -62,6 +63,7 @@ public class AnalysisScope {
myProject = project;
myFilter = filter;
myElement = null;
myModules = null;
myModule = null;
myType = PROJECT;
}
@@ -70,13 +72,25 @@ public class AnalysisScope {
myFilter = filter;
myProject = null;
myElement = null;
myModules = null;
myModule = module;
myType = MODULE;
}
public AnalysisScope(final Module[] modules, final PsiFileFilter filter) {
myFilter = filter;
myModules = Arrays.asList(modules);
myModule = null;
myFilter = filter;
myProject = null;
myElement = null;
myType = MODULES;
}
public AnalysisScope(PsiDirectory psiDirectory, PsiFileFilter filter) {
myFilter = filter;
myProject = null;
myModules = null;
myModule = null;
myElement = psiDirectory;
if (psiDirectory.getPackage() != null) {
@@ -91,6 +105,7 @@ public class AnalysisScope {
myFilter = filter;
myProject = null;
myModule = null;
myModules = null;
myElement = psiPackage;
myType = PACKAGE;
}
@@ -100,6 +115,7 @@ public class AnalysisScope {
myProject = null;
myElement = psiFile;
myModule = null;
myModules = null;
myType = FILE;
}
@@ -140,7 +156,7 @@ public class AnalysisScope {
myFilesSet = new HashSet();
myElement.accept(createFileSearcher());
}
else if (myType == PROJECT || myType == MODULE || myType == PACKAGE) {
else if (myType == PROJECT || myType == MODULES || myType == MODULE || myType == PACKAGE) {
myFilesSet = new HashSet();
accept(createFileSearcher());
}
@@ -182,6 +198,8 @@ public class AnalysisScope {
}
else if (myType == MODULE) {
modules.add(myModule);
} else if (myType == MODULES){
modules.addAll(myModules);
}
if (modules.isEmpty()) {
@@ -246,6 +264,22 @@ public class AnalysisScope {
}
});
}
else if (myModules != null) {
for (Iterator<Module> iterator = myModules.iterator(); iterator.hasNext();) {
final Module module = iterator.next();
final FileIndex moduleFileIndex = ModuleRootManager.getInstance(module).getFileIndex();
moduleFileIndex.iterateContent(new ContentIterator() {
public boolean processFile(VirtualFile fileOrDir) {
if (moduleFileIndex.isContentJavaSourceFile(fileOrDir)) {
PsiFile psiFile = PsiManager.getInstance(module.getProject()).findFile(fileOrDir);
LOG.assertTrue(psiFile != null);
psiFile.accept(visitor);
}
return true;
}
});
}
}
else if (myElement instanceof PsiPackage) {
PsiPackage pack = (PsiPackage)myElement;
PsiDirectory[] dirs = pack.getDirectories(GlobalSearchScope.projectScope(myElement.getProject()));
@@ -259,7 +293,7 @@ public class AnalysisScope {
}
public boolean isValid() {
if (myProject != null || myModule != null) return true;
if (myProject != null || myModule != null || myModules != null) return true;
return myElement.isValid();
}
@@ -271,6 +305,14 @@ public class AnalysisScope {
switch (myType) {
case MODULE:
return "Module " + pathToName(myModule.getModuleFilePath());
case MODULES:
String displayName = "Module" + (myModules.size() > 1 ? "s " : " ");
for (Iterator<Module> iterator = myModules.iterator(); iterator.hasNext();) {
Module module = iterator.next();
displayName += pathToName(module.getModuleFilePath()) + ", ";
}
displayName = displayName.substring(0, displayName.length() - 2);
return displayName;
case PROJECT:
return "Project " + pathToName(myProject.getProjectFilePath());
case FILE:
@@ -95,6 +95,10 @@ public abstract class BaseAnalysisAction extends AnAction {
return new AnalysisScope(moduleContext, myFileFilter);
}
Module [] modulesArray = (Module[])dataContext.getData(DataConstantsEx.MODULE_CONTEXT_ARRAY);
if (modulesArray != null) {
return new AnalysisScope(modulesArray, myFileFilter);
}
PsiFile psiFile = (PsiFile)dataContext.getData(DataConstants.PSI_FILE);
if (psiFile != null) {
return psiFile instanceof PsiJavaFile ? new AnalysisScope(psiFile, myFileFilter) : null;
@@ -9,7 +9,6 @@ import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.packageDependencies.ui.DependenciesPanel;
import com.intellij.peer.PeerFactory;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.NamedScope;
@@ -51,6 +51,10 @@ public class FileNode extends PackageDependenciesNode {
return 4;
}
public int getContainingFiles() {
return 1;
}
public PsiElement getPsiElement() {
return myFile;
}
@@ -30,7 +30,7 @@ public class GeneralGroupNode extends PackageDependenciesNode {
}
public String toString() {
return myName;
return myName + getPresentableFilesCount();
}
public int getWeight() {
@@ -30,7 +30,7 @@ public class LibraryNode extends PackageDependenciesNode {
}
public String toString() {
return myLibraryOrJdk.getPresentableName();
return myLibraryOrJdk.getPresentableName() + getPresentableFilesCount();
}
public int getWeight() {
@@ -34,7 +34,7 @@ public class ModuleNode extends PackageDependenciesNode {
}
public String toString() {
return myModule == null ? "<unknown>" : myModule.getName();
return myModule == null ? "<unknown>" : myModule.getName() + getPresentableFilesCount();
}
public String getModuleName() {
@@ -55,6 +55,19 @@ public class PackageDependenciesNode extends DefaultMutableTreeNode implements N
return null;
}
public int getContainingFiles(){
int result = 0;
for (int i = 0; i < getChildCount(); i++) {
result += ((PackageDependenciesNode)getChildAt(i)).getContainingFiles();
}
return result;
}
protected String getPresentableFilesCount(){
final int filesCount = getContainingFiles();
return filesCount > 0 ? " (" + filesCount + (filesCount > 1 ? " entries" : " entry") + ")" : "";
}
public void add(MutableTreeNode newChild) {
super.add(newChild);
boolean hasUnmarked = ((PackageDependenciesNode)newChild).hasUnmarked();
@@ -40,7 +40,7 @@ public class PackageNode extends PackageDependenciesNode {
}
public String toString() {
return myPackageName;
return myPackageName + getPresentableFilesCount();
}
public String getPackageQName() {