scopes: use vFiles instead of psi

This commit is contained in:
anna
2011-07-21 17:20:55 +04:00
parent ee817a280e
commit 896dcf99a3
36 changed files with 246 additions and 195 deletions
@@ -15,9 +15,11 @@
*/
package com.intellij.cyclicDependencies.ui;
import com.intellij.analysis.AnalysisScopeBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.ui.PackageDependenciesNode;
import com.intellij.psi.PsiFile;
import com.intellij.analysis.AnalysisScopeBundle;
import javax.swing.*;
import java.util.Set;
@@ -27,11 +29,15 @@ import java.util.Set;
* Date: Jan 31, 2005
*/
public class CycleNode extends PackageDependenciesNode{
public CycleNode(Project project) {
super(project);
}
public void fillFiles(Set<PsiFile> set, boolean recursively) {
super.fillFiles(set, recursively);
}
public void addFile(PsiFile file, boolean isMarked) {
public void addFile(VirtualFile file, boolean isMarked) {
super.addFile(file, isMarked);
}
@@ -27,6 +27,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.DependencyUISettings;
import com.intellij.packageDependencies.DependencyValidationManager;
import com.intellij.packageDependencies.DependencyValidationManagerImpl;
@@ -267,7 +268,7 @@ public class CyclicDependenciesPanel extends JPanel implements Disposable, DataP
mySettings.UI_SHOW_FILES = false;
myLeftTreeExpansionMonitor.freeze();
myLeftTree.setModel(TreeModelBuilder.createTreeModel(myProject, false, psiFiles, new Marker() {
public boolean isMarked(PsiFile file) {
public boolean isMarked(VirtualFile file) {
return false;
}
}, mySettings));
@@ -285,7 +286,7 @@ public class CyclicDependenciesPanel extends JPanel implements Disposable, DataP
}
private void updateRightTreeModel() {
PackageDependenciesNode root = new RootNode();
PackageDependenciesNode root = new RootNode(myProject);
final PackageNode packageNode = getSelectedPackage(myLeftTree);
if (packageNode != null) {
boolean group = mySettings.UI_GROUP_BY_SCOPE_TYPE;
@@ -302,14 +303,14 @@ public class CyclicDependenciesPanel extends JPanel implements Disposable, DataP
final PackageDependenciesNode pack = (PackageDependenciesNode)TreeModelBuilder
.createTreeModel(myProject, false, dependentFilesInPackage, new Marker() {
public boolean isMarked(PsiFile file) {
public boolean isMarked(VirtualFile file) {
return false;
}
}, mySettings).getRoot();
nodes[i] = hideEmptyMiddlePackages((PackageDependenciesNode)pack.getChildAt(0), new StringBuffer());
}
PackageDependenciesNode cycleNode = new CycleNode();
PackageDependenciesNode cycleNode = new CycleNode(myProject);
for (PackageDependenciesNode node : nodes) {
node.setEquals(true);
cycleNode.insert(node, 0);
@@ -134,7 +134,7 @@ public class ClassesScopeTreeStructureExpander implements ScopeTreeStructureExpa
if (fileNodes == null) {
fileNodes = new HashSet<FileNode>();
}
fileNodes.add(new FileNode(containingFile, true));
fileNodes.add(new FileNode(containingFile.getVirtualFile(), myProject, true));
}
node.remove(classNode);
}
@@ -15,6 +15,7 @@
*/
package com.intellij.packageDependencies.ui;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import javax.swing.*;
@@ -25,7 +26,8 @@ public class GeneralGroupNode extends PackageDependenciesNode {
private final Icon myOpenIcon;
private final Icon myClosedIcon;
public GeneralGroupNode(String name, Icon openIcon, Icon closedIcon) {
public GeneralGroupNode(String name, Icon openIcon, Icon closedIcon, Project project) {
super(project);
myName = name;
myOpenIcon = openIcon;
myClosedIcon = closedIcon;
@@ -15,6 +15,7 @@
*/
package com.intellij.packageDependencies.ui;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.JdkOrderEntry;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.openapi.util.IconLoader;
@@ -31,7 +32,8 @@ public class LibraryNode extends PackageDependenciesNode {
private final OrderEntry myLibraryOrJdk;
public LibraryNode(OrderEntry libraryOrJdk) {
public LibraryNode(OrderEntry libraryOrJdk, Project project) {
super(project);
myLibraryOrJdk = libraryOrJdk;
}
@@ -35,6 +35,7 @@ public class PackageNode extends PackageDependenciesNode {
public PackageNode(PsiPackage aPackage, boolean showFQName) {
super(aPackage.getProject());
myPackage = aPackage;
myPackageName = showFQName ? aPackage.getQualifiedName() : aPackage.getName();
if (myPackageName == null || myPackageName.length() == 0) {
@@ -93,7 +93,7 @@ public class TreeModelBuilder {
myShowModuleGroups = settings.UI_SHOW_MODULE_GROUPS && multiModuleProject;
myMarker = marker;
myAddUnmarkedFiles = !settings.UI_FILTER_LEGALS;
myRoot = new RootNode();
myRoot = new RootNode(project);
myFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
myPsiManager = PsiManager.getInstance(project);
@@ -102,9 +102,9 @@ public class TreeModelBuilder {
createMaps(ScopeType.TEST);
if (myGroupByScopeType) {
mySourceRoot = new GeneralGroupNode(PRODUCTION_NAME, PlatformIcons.PACKAGE_OPEN_ICON, PlatformIcons.PACKAGE_ICON);
myTestRoot = new GeneralGroupNode(TEST_NAME, TEST_ICON, TEST_ICON);
myLibsRoot = new GeneralGroupNode(LIBRARY_NAME, LIB_ICON_OPEN, LIB_ICON_CLOSED);
mySourceRoot = new GeneralGroupNode(PRODUCTION_NAME, PlatformIcons.PACKAGE_OPEN_ICON, PlatformIcons.PACKAGE_ICON, null);
myTestRoot = new GeneralGroupNode(TEST_NAME, TEST_ICON, TEST_ICON, null);
myLibsRoot = new GeneralGroupNode(LIBRARY_NAME, LIB_ICON_OPEN, LIB_ICON_CLOSED, null);
myRoot.add(mySourceRoot);
myRoot.add(myTestRoot);
myRoot.add(myLibsRoot);
@@ -173,10 +173,7 @@ public class TreeModelBuilder {
PackageDependenciesNode lastParent = null;
public boolean processFile(VirtualFile fileOrDir) {
if (!fileOrDir.isDirectory()) {
final PsiFile psiFile = psiManager.findFile(fileOrDir);
if (psiFile != null) {
lastParent = buildFileNode(psiFile, lastParent);
}
lastParent = buildFileNode(fileOrDir, lastParent);
} else {
lastParent = null;
}
@@ -211,10 +208,7 @@ public class TreeModelBuilder {
}
}
else {
final PsiFile psiFile = psiManager.findFile(file);
if (psiFile != null) { // skip inners & anonymous
return buildFileNode(psiFile, parent);
}
return buildFileNode(file, parent);
}
return null;
}
@@ -250,7 +244,7 @@ public class TreeModelBuilder {
public void run() {
for (final PsiFile file : files) {
if (file != null) {
buildFileNode(file, null);
buildFileNode(file.getVirtualFile(), null);
}
}
}
@@ -268,15 +262,12 @@ public class TreeModelBuilder {
}
@Nullable
private PackageDependenciesNode buildFileNode(PsiFile file, @Nullable PackageDependenciesNode parent) {
private PackageDependenciesNode buildFileNode(VirtualFile file, @Nullable PackageDependenciesNode parent) {
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
if (indicator != null) {
indicator.setIndeterminate(false);
indicator.setText(AnalysisScopeBundle.message("package.dependencies.build.progress.text"));
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null) {
indicator.setText2(virtualFile.getPresentableUrl());
}
indicator.setText2(file.getPresentableUrl());
indicator.setFraction(((double)myScannedFileCount++) / myTotalFileCount);
}
@@ -288,7 +279,7 @@ public class TreeModelBuilder {
if (dirNode == null) return null;
if (myShowFiles) {
FileNode fileNode = new FileNode(file, isMarked);
FileNode fileNode = new FileNode(file, myProject, isMarked);
dirNode.add(fileNode);
}
else {
@@ -299,23 +290,18 @@ public class TreeModelBuilder {
return null;
}
public @Nullable PackageDependenciesNode getFileParentNode(PsiFile file) {
VirtualFile vFile = file.getVirtualFile();
public @Nullable PackageDependenciesNode getFileParentNode(VirtualFile vFile) {
LOG.assertTrue(vFile != null);
final VirtualFile containingDirectory = vFile.getParent();
LOG.assertTrue(containingDirectory != null);
PsiPackage aPackage = null;
if (file instanceof PsiJavaFile){
aPackage = getFilePackage((PsiJavaFile)file);
} else {
final String packageName = myFileIndex.getPackageNameByDirectory(containingDirectory);
if (packageName != null) {
aPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage(packageName);
}
}
if (aPackage != null) {
PsiPackage aPackage = null;
final String packageName = myFileIndex.getPackageNameByDirectory(containingDirectory);
if (packageName != null) {
aPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage(packageName);
}
if (aPackage != null) {
if (myFileIndex.isInLibrarySource(vFile) || myFileIndex.isInLibraryClasses(vFile)) {
return getLibraryDirNode(aPackage, getLibraryForFile(file));
return getLibraryDirNode(aPackage, getLibraryForFile(vFile));
}
else {
return getModuleDirNode(aPackage, myFileIndex.getModuleForFile(vFile), getFileScopeType(vFile));
@@ -347,8 +333,7 @@ public class TreeModelBuilder {
}
@Nullable
private OrderEntry getLibraryForFile(PsiFile file) {
final VirtualFile virtualFile = file.getVirtualFile();
private OrderEntry getLibraryForFile(VirtualFile virtualFile) {
if (virtualFile == null) return null;
List<OrderEntry> orders = myFileIndex.getOrderEntriesForFile(virtualFile);
for (OrderEntry order : orders) {
@@ -438,7 +423,7 @@ public class TreeModelBuilder {
private PackageDependenciesNode getParentModuleGroup(String [] groupPath, ScopeType scopeType){
ModuleGroupNode groupNode = getMap(myModuleGroupNodes, scopeType).get(groupPath[groupPath.length - 1]);
if (groupNode == null) {
groupNode = new ModuleGroupNode(new ModuleGroup(groupPath));
groupNode = new ModuleGroupNode(new ModuleGroup(groupPath), myProject);
getMap(myModuleGroupNodes, scopeType).put(groupPath[groupPath.length - 1], groupNode);
getRootNode(scopeType).add(groupNode);
}
@@ -459,7 +444,8 @@ public class TreeModelBuilder {
if (!myShowIndividualLibs) {
if (myGroupByScopeType) return getRootNode(ScopeType.LIB);
if (myAllLibsNode == null) {
myAllLibsNode = new GeneralGroupNode(AnalysisScopeBundle.message("dependencies.libraries.node.text"), LIB_ICON_OPEN, LIB_ICON_CLOSED);
myAllLibsNode = new GeneralGroupNode(AnalysisScopeBundle.message("dependencies.libraries.node.text"), LIB_ICON_OPEN, LIB_ICON_CLOSED,
null);
getRootNode(ScopeType.LIB).add(myAllLibsNode);
}
return myAllLibsNode;
@@ -467,7 +453,7 @@ public class TreeModelBuilder {
LibraryNode node = getMap(myLibraryNodes, ScopeType.LIB).get(libraryOrJdk);
if (node != null) return node;
node = new LibraryNode(libraryOrJdk);
node = new LibraryNode(libraryOrJdk, null);
getMap(myLibraryNodes, ScopeType.LIB).put(libraryOrJdk, node);
getRootNode(ScopeType.LIB).add(node);
@@ -21,7 +21,6 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.*;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -30,7 +29,7 @@ import java.io.File;
import java.util.List;
import java.util.regex.Pattern;
public class PatternPackageSet implements PatternBasedPackageSet {
public class PatternPackageSet extends PatternBasedPackageSet {
@NonNls public static final String SCOPE_TEST = "test";
@NonNls public static final String SCOPE_SOURCE = "src";
@NonNls public static final String SCOPE_LIBRARY = "lib";
@@ -72,44 +71,38 @@ public class PatternPackageSet implements PatternBasedPackageSet {
myPattern = aspectPattern != null ? Pattern.compile(FilePatternPackageSet.convertToRegexp(aspectPattern, '.')) : null;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
Project project = file.getProject();
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
Project project = holder.getProject();
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
return matchesScope(file, fileIndex) && (myPattern == null || myPattern.matcher(getPackageName(file, fileIndex)).matches());
return matchesScope(file, holder.getProject(), fileIndex) && (myPattern == null || myPattern.matcher(getPackageName(file, fileIndex)).matches());
}
private boolean matchesScope(PsiFile file, ProjectFileIndex fileIndex) {
VirtualFile vFile = file.getVirtualFile();
if (vFile == null) return false;
boolean isSource = fileIndex.isInSourceContent(vFile);
private boolean matchesScope(VirtualFile file, Project project, ProjectFileIndex fileIndex) {
if (file == null) return false;
boolean isSource = fileIndex.isInSourceContent(file);
if (myScope == SCOPE_ANY) {
return fileIndex.isInContent(vFile) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, vFile, fileIndex);
return fileIndex.isInContent(file) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, file, fileIndex);
}
if (myScope == SCOPE_SOURCE) {
return isSource && !fileIndex.isInTestSourceContent(vFile) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, vFile, fileIndex);
return isSource && !fileIndex.isInTestSourceContent(file) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern,
file, fileIndex);
}
if (myScope == SCOPE_LIBRARY) {
return (fileIndex.isInLibraryClasses(vFile) || fileIndex.isInLibrarySource(vFile)) && matchesLibrary(myModulePattern, vFile, fileIndex);
return (fileIndex.isInLibraryClasses(file) || fileIndex.isInLibrarySource(file)) && matchesLibrary(myModulePattern, file, fileIndex);
}
if (myScope == SCOPE_TEST) {
return isSource && fileIndex.isInTestSourceContent(vFile) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, vFile, fileIndex);
return isSource && fileIndex.isInTestSourceContent(file) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern,
file, fileIndex);
}
if (myScope == SCOPE_PROBLEM) {
return isSource && WolfTheProblemSolver.getInstance(file.getProject()).isProblemFile(vFile) && FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, vFile, fileIndex);
return isSource && WolfTheProblemSolver.getInstance(project).isProblemFile(file) &&
FilePatternPackageSet.matchesModule(myModuleGroupPattern, myModulePattern, file, fileIndex);
}
throw new RuntimeException("Unknown scope: " + myScope);
}
private static String getPackageName(PsiFile file, ProjectFileIndex fileIndex) {
VirtualFile virtualFile = file.getVirtualFile();
if (fileIndex.isInLibrarySource(virtualFile)) {
return StringUtil.getQualifiedName(fileIndex.getPackageNameByDirectory(virtualFile.getParent()), virtualFile.getNameWithoutExtension());
}
if (file instanceof PsiJavaFile) return StringUtil.getQualifiedName(((PsiJavaFile)file).getPackageName(), virtualFile.getNameWithoutExtension());
PsiDirectory dir = file.getContainingDirectory();
PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(dir);
return aPackage == null ? file.getName() : StringUtil.getQualifiedName(aPackage.getQualifiedName(), virtualFile.getNameWithoutExtension());
private static String getPackageName(VirtualFile file, ProjectFileIndex fileIndex) {
return StringUtil.getQualifiedName(fileIndex.getPackageNameByDirectory(file.getParent()), file.getNameWithoutExtension());
}
public PackageSet createCopy() {
@@ -26,10 +26,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopeManager;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.psi.search.scope.packageSet.PackageSet;
import com.intellij.psi.search.scope.packageSet.*;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
@@ -599,11 +596,15 @@ public abstract class GlobalSearchScope extends SearchScope implements ProjectAw
}
public boolean contains(VirtualFile file) {
PsiFile psiFile = myManager.findFile(file);
if (psiFile == null) return false;
NamedScopesHolder holder = NamedScopeManager.getInstance(getProject());
final PackageSet packageSet = mySet.getValue();
return packageSet != null && packageSet.contains(psiFile, holder);
if (packageSet != null) {
if (packageSet instanceof PackageSetBase) return ((PackageSetBase)packageSet).contains(file, holder);
PsiFile psiFile = myManager.findFile(file);
if (psiFile == null) return false;
return packageSet.contains(psiFile, holder);
}
return false;
}
public String getDisplayName() {
@@ -15,11 +15,9 @@
*/
package com.intellij.psi.search.scope;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
@@ -37,8 +35,7 @@ public class NonProjectFilesScope extends NamedScope {
public NonProjectFilesScope() {
super(NAME, new AbstractPackageSet("NonProject") {
public boolean contains(PsiFile psiFile, NamedScopesHolder holder) {
final VirtualFile file = psiFile.getVirtualFile();
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
if (file == null) return true;
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
return !(holder.getProject().isInitialized() && !fileIndex.isIgnored(file) && fileIndex.getContentRootForFile(file) != null);
@@ -18,7 +18,6 @@ package com.intellij.psi.search.scope;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
@@ -30,8 +29,7 @@ public class ProjectFilesScope extends NamedScope {
public static final String NAME = "Project Files";
public ProjectFilesScope() {
super(NAME, new AbstractPackageSet("ProjectFiles") {
public boolean contains(PsiFile psiFile, NamedScopesHolder holder) {
final VirtualFile file = psiFile.getVirtualFile();
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
if (file == null) return false;
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
return holder.getProject().isInitialized()
@@ -19,7 +19,6 @@ import com.intellij.ide.IdeBundle;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
@@ -30,14 +29,12 @@ import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
public class ProjectProductionScope extends NamedScope {
public ProjectProductionScope() {
super(IdeBundle.message("predefined.scope.production.name"), new AbstractPackageSet("src:*..*") {
public boolean contains(PsiFile file, NamedScopesHolder holder) {
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
final VirtualFile virtualFile = file.getVirtualFile();
return file.getProject() == holder.getProject()
&& virtualFile != null
&& !index.isInTestSourceContent(virtualFile)
&& !index.isInLibraryClasses(virtualFile)
&& !index.isInLibrarySource(virtualFile);
return file != null
&& !index.isInTestSourceContent(file)
&& !index.isInLibraryClasses(file)
&& !index.isInLibrarySource(file);
}
});
}
@@ -19,7 +19,6 @@ import com.intellij.ide.IdeBundle;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
@@ -33,12 +32,9 @@ public class TestsScope extends NamedScope {
public static final String NAME = IdeBundle.message("predefined.scope.tests.name");
public TestsScope() {
super(NAME, new AbstractPackageSet("test:*..*") {
public boolean contains(PsiFile file, NamedScopesHolder holder) {
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
final VirtualFile virtualFile = file.getVirtualFile();
return file.getProject() == holder.getProject()
&& virtualFile != null
&& index.isInTestSourceContent(virtualFile);
return file != null && index.isInTestSourceContent(file);
}
});
}
@@ -20,7 +20,7 @@ import org.jetbrains.annotations.NotNull;
/**
* @author Konstantin Bulenkov
*/
public abstract class AbstractPackageSet implements PackageSet {
public abstract class AbstractPackageSet extends PackageSetBase {
private final String myText;
private final int myPriority;
@@ -33,7 +33,7 @@ public abstract class AbstractPackageSet implements PackageSet {
myPriority = priority;
}
public PackageSet createCopy() {
public AbstractPackageSet createCopy() {
return this;
}
@@ -15,17 +15,18 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.vfs.VirtualFile;
public class ComplementPackageSet implements PackageSet {
public class ComplementPackageSet extends PackageSetBase {
private final PackageSet myComplementarySet;
public ComplementPackageSet(PackageSet set) {
myComplementarySet = set;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return !myComplementarySet.contains(file, holder);
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return myComplementarySet instanceof PackageSetBase ? !((PackageSetBase)myComplementarySet).contains(file, holder)
: myComplementarySet.contains(getPsiFile(file, holder), holder);
}
public PackageSet createCopy() {
@@ -30,12 +30,11 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NonNls;
import java.util.regex.Pattern;
public class FilePatternPackageSet implements PatternBasedPackageSet {
public class FilePatternPackageSet extends PatternBasedPackageSet {
public static final @NonNls String SCOPE_FILE = "file";
private Pattern myModulePattern;
private Pattern myModuleGroupPattern;
@@ -66,12 +65,11 @@ public class FilePatternPackageSet implements PatternBasedPackageSet {
myFilePattern = filePattern != null ? Pattern.compile(convertToRegexp(filePattern, '/')) : null;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
Project project = file.getProject();
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
Project project = holder.getProject();
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
VirtualFile vFile = file.getVirtualFile();
return vFile != null && fileIndex.isInContent(vFile) && fileMatcher(vFile, fileIndex) && matchesModule(myModuleGroupPattern,
myModulePattern, vFile, fileIndex);
return file != null && fileIndex.isInContent(file) && fileMatcher(file, fileIndex) && matchesModule(myModuleGroupPattern,
myModulePattern, file, fileIndex);
}
private boolean fileMatcher(VirtualFile virtualFile, ProjectFileIndex fileIndex){
@@ -15,9 +15,9 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.vfs.VirtualFile;
public class IntersectionPackageSet implements PackageSet {
public class IntersectionPackageSet extends PackageSetBase {
private final PackageSet myFirstSet;
private final PackageSet mySecondSet;
@@ -26,8 +26,13 @@ public class IntersectionPackageSet implements PackageSet {
mySecondSet = secondSet;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return myFirstSet.contains(file, holder) && mySecondSet.contains(file, holder);
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
if (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, holder) : myFirstSet.contains(getPsiFile(file, holder), holder)) {
if (mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, holder) : mySecondSet.contains(getPsiFile(file, holder), holder)) {
return true;
}
}
return false;
}
public PackageSet createCopy() {
@@ -15,20 +15,22 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.vfs.VirtualFile;
public class NamedPackageSetReference implements PackageSet {
public class NamedPackageSetReference extends PackageSetBase {
private final String myName;
public NamedPackageSetReference(String name) {
myName = name.startsWith("$") ? name.substring(1) : name;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
final NamedScope scope = holder.getScope(myName);
if (scope != null) {
final PackageSet packageSet = scope.getValue();
return packageSet != null && packageSet.contains(file, holder);
if (packageSet != null) {
return packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(getPsiFile(file, holder), holder);
}
}
return false;
}
@@ -0,0 +1,38 @@
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.Nullable;
/**
* User: anna
*/
public abstract class PackageSetBase implements PackageSet {
public abstract boolean contains(VirtualFile file, NamedScopesHolder holder);
@Override
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return contains(file.getVirtualFile(), holder);
}
@Nullable
public static PsiFile getPsiFile(VirtualFile file, NamedScopesHolder holder) {
return PsiManager.getInstance(holder.getProject()).findFile(file);
}
}
@@ -19,9 +19,9 @@ package com.intellij.psi.search.scope.packageSet;
* User: anna
* Date: Jul 26, 2010
*/
public interface PatternBasedPackageSet extends PackageSet{
String getPattern();
String getModulePattern();
public abstract class PatternBasedPackageSet extends PackageSetBase {
public abstract String getPattern();
public abstract String getModulePattern();
boolean isOn(String oldQName);
public abstract boolean isOn(String oldQName);
}
@@ -15,10 +15,10 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
public class UnionPackageSet implements PackageSet {
public class UnionPackageSet extends PackageSetBase {
private final PackageSet myFirstSet;
private final PackageSet mySecondSet;
@@ -27,8 +27,10 @@ public class UnionPackageSet implements PackageSet {
mySecondSet = set2;
}
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return myFirstSet.contains(file, holder) || mySecondSet.contains(file, holder);
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, holder) : myFirstSet.contains(getPsiFile(file, holder), holder)) ||
(mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, holder) : mySecondSet.contains(getPsiFile(file, holder), holder));
}
public PackageSet createCopy() {
@@ -21,14 +21,11 @@ import com.intellij.ide.SelectInManager;
import com.intellij.ide.StandardTargetWeights;
import com.intellij.ide.impl.ProjectViewSelectInTarget;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.DependencyValidationManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileSystemItem;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopeManager;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.psi.search.scope.packageSet.PackageSet;
import com.intellij.psi.search.scope.packageSet.*;
import com.intellij.util.ArrayUtil;
/**
@@ -74,7 +71,13 @@ public class ScopePaneSelectInTarget extends ProjectViewSelectInTarget {
final NamedScope scope = NamedScopesHolder.getScope(myProject, subId);
if (scope == null) return false;
PackageSet packageSet = scope.getValue();
PsiFile psiFile = PsiManager.getInstance(myProject).findFile(context.getVirtualFile());
return psiFile != null && packageSet != null && packageSet.contains(psiFile, NamedScopesHolder.getHolder(myProject, subId, DependencyValidationManager.getInstance(myProject)));
final VirtualFile virtualFile = context.getVirtualFile();
if (packageSet != null) {
final NamedScopesHolder holder = NamedScopesHolder.getHolder(myProject, subId, DependencyValidationManager.getInstance(myProject));
if (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(virtualFile, holder) : packageSet.contains(PackageSetBase.getPsiFile(virtualFile, holder), holder)) {
return true;
}
}
return false;
}
}
@@ -67,6 +67,7 @@ import com.intellij.psi.*;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.psi.search.scope.packageSet.PackageSet;
import com.intellij.psi.search.scope.packageSet.PackageSetBase;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.ScrollPaneFactory;
@@ -267,8 +268,8 @@ public class ScopeTreeViewPanel extends JPanel implements JDOMExternalizable, Di
settings.UI_FLATTEN_PACKAGES = projectView.isFlattenPackages(ScopeViewPane.ID);
settings.UI_COMPACT_EMPTY_MIDDLE_PACKAGES = projectView.isHideEmptyMiddlePackages(ScopeViewPane.ID);
myBuilder = new FileTreeModelBuilder(myProject, new Marker() {
public boolean isMarked(PsiFile file) {
return packageSet != null && packageSet.contains(file, holder);
public boolean isMarked(VirtualFile file) {
return packageSet != null && (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(PackageSetBase.getPsiFile(file, holder), holder));
}
}, settings);
myTree.setModel(myBuilder.build(myProject, showProgress, projectView.isSortByType(ScopeViewPane.ID)));
@@ -38,6 +38,7 @@ public class BasePsiNode<T extends PsiElement> extends PackageDependenciesNode {
private PsiFile myFile = null;
public BasePsiNode(final T element) {
super(element.getProject());
if (element.isValid()) {
myPsiElementPointer = SmartPointerManager.getInstance(element.getProject()).createLazyPointer(element);
myFile = element.getContainingFile();
@@ -21,6 +21,8 @@ import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressManager;
@@ -28,11 +30,9 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.DependencyUISettings;
import com.intellij.packageDependencies.ui.*;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.packageSet.*;
import com.intellij.ui.*;
import com.intellij.ui.treeStructure.Tree;
@@ -89,7 +89,7 @@ public class ScopeEditorPanel {
myHolder = holder;
myButtonsPanel.add(createActionsPanel());
myPackageTree = new Tree(new RootNode());
myPackageTree = new Tree(new RootNode(project));
myTreePanel.setLayout(new BorderLayout());
myTreePanel.add(ScrollPaneFactory.createScrollPane(myPackageTree), BorderLayout.CENTER);
@@ -99,8 +99,8 @@ public class ScopeEditorPanel {
myTreeExpansionMonitor = PackageTreeExpansionMonitor.install(myPackageTree, myProject);
myTreeMarker = new Marker() {
public boolean isMarked(PsiFile file) {
return myCurrentScope != null && myCurrentScope.contains(file, getHolder());
public boolean isMarked(VirtualFile file) {
return myCurrentScope != null && (myCurrentScope instanceof PackageSetBase ? ((PackageSetBase)myCurrentScope).contains(file, getHolder()) : myCurrentScope.contains(PackageSetBase.getPsiFile(file, getHolder()), getHolder()));
}
};
@@ -18,23 +18,15 @@ package com.intellij.packageDependencies;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.changes.ChangeList;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ContentRevision;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.NonProjectFilesScope;
import com.intellij.psi.search.scope.ProjectFilesScope;
import com.intellij.psi.search.scope.TestsScope;
import com.intellij.psi.search.scope.packageSet.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -77,10 +69,10 @@ public class ChangeListsScopesProvider implements CustomScopesProvider {
}
private static NamedScope createScope(final List<VirtualFile> files, String changeListName) {
return new NamedScope(changeListName, new PackageSet() {
return new NamedScope(changeListName, new PackageSetBase() {
@Override
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return files.contains(file.getVirtualFile());
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return files.contains(file);
}
@Override
@@ -18,8 +18,8 @@ package com.intellij.packageDependencies;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.scope.NonProjectFilesScope;
import com.intellij.psi.search.scope.ProjectFilesScope;
import com.intellij.psi.search.scope.TestsScope;
@@ -51,9 +51,9 @@ public class DefaultScopesProvider implements CustomScopesProvider {
final NamedScope nonProjectScope = new NonProjectFilesScope();
final String text = FilePatternPackageSet.SCOPE_FILE + ":*//*";
myProblemsScope = new NamedScope(IdeBundle.message("predefined.scope.problems.name"), new AbstractPackageSet(text) {
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return file.getProject() == myProject
&& WolfTheProblemSolver.getInstance(myProject).isProblemFile(file.getVirtualFile());
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return holder.getProject() == myProject
&& WolfTheProblemSolver.getInstance(myProject).isProblemFile(file);
}
});
myScopes = Arrays.asList(projectScope, getProblemsScope(), getAllScope(), projectTestScope, nonProjectScope);
@@ -68,7 +68,7 @@ public class DefaultScopesProvider implements CustomScopesProvider {
private static class AllScopeHolder {
private static final String TEXT = FilePatternPackageSet.SCOPE_FILE + ":*//*";
private static final NamedScope ALL = new NamedScope("All", new AbstractPackageSet(TEXT, 0) {
public boolean contains(final PsiFile file, final NamedScopesHolder scopesHolder) {
public boolean contains(final VirtualFile file, final NamedScopesHolder scopesHolder) {
return true;
}
});
@@ -150,13 +150,13 @@ public class DependenciesPanel extends JPanel implements Disposable, DataProvide
myLeftTreeExpansionMonitor = PackageTreeExpansionMonitor.install(myLeftTree, myProject);
myRightTreeMarker = new Marker() {
public boolean isMarked(PsiFile file) {
public boolean isMarked(VirtualFile file) {
return myIllegalsInRightTree.contains(file);
}
};
myLeftTreeMarker = new Marker() {
public boolean isMarked(PsiFile file) {
public boolean isMarked(VirtualFile file) {
return myIllegalDependencies.containsKey(file);
}
};
@@ -46,6 +46,7 @@ public class DirectoryNode extends PackageDependenciesNode {
//private static final Logger LOG = Logger.getInstance("#com.intellij.packageDependencies.ui.DirectoryNode");
public DirectoryNode(PsiDirectory aDirectory, boolean compactPackages, boolean showFQName) {
super(aDirectory.getProject());
myDirectory = aDirectory;
VirtualFile directory = myDirectory.getVirtualFile();
final ProjectFileIndex index = ProjectRootManager.getInstance(myDirectory.getProject()).getFileIndex();
@@ -17,12 +17,15 @@
package com.intellij.packageDependencies.ui;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.vcs.FileStatusManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.IconUtil;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
@@ -30,18 +33,20 @@ import java.util.Map;
import java.util.Set;
public class FileNode extends PackageDependenciesNode {
private final PsiFile myFile;
private PsiFile myFile;
private final VirtualFile myVFile;
private final boolean myMarked;
private static final Logger LOG = Logger.getInstance("com.intellij.packageDependencies.ui.FileNode");
public FileNode(PsiFile file, boolean marked) {
myFile = file;
myMarked = marked;
public FileNode(VirtualFile file, Project project, boolean marked) {
super(project);
myVFile = file;
myMarked = marked;
}
public void fillFiles(Set<PsiFile> set, boolean recursively) {
super.fillFiles(set, recursively);
set.add(myFile);
set.add(getFile());
}
public boolean hasUnmarked() {
@@ -53,9 +58,7 @@ public class FileNode extends PackageDependenciesNode {
}
public String toString() {
final VirtualFile virtualFile = myFile.getVirtualFile();
LOG.assertTrue(virtualFile != null);
return virtualFile.getName();
return myVFile.getName();
}
public Icon getOpenIcon() {
@@ -67,9 +70,7 @@ public class FileNode extends PackageDependenciesNode {
}
private Icon getIcon() {
VirtualFile vFile = myFile.getVirtualFile();
LOG.assertTrue(vFile != null);
return IconUtil.getIcon(vFile, Iconable.ICON_FLAG_VISIBILITY | Iconable.ICON_FLAG_READ_STATUS, myFile.getProject());
return IconUtil.getIcon(myVFile, Iconable.ICON_FLAG_VISIBILITY | Iconable.ICON_FLAG_READ_STATUS, myProject);
}
public int getWeight() {
@@ -81,12 +82,12 @@ public class FileNode extends PackageDependenciesNode {
}
public PsiElement getPsiElement() {
return myFile;
return getFile();
}
public Color getColor() {
if (myColor == null) {
myColor = FileStatusManager.getInstance(myFile.getProject()).getStatus(myFile.getVirtualFile()).getColor();
myColor = FileStatusManager.getInstance(myProject).getStatus(myVFile).getColor();
if (myColor == null) {
myColor = NOT_CHANGED;
}
@@ -103,22 +104,30 @@ public class FileNode extends PackageDependenciesNode {
final FileNode fileNode = (FileNode)o;
if (!myFile.equals(fileNode.myFile)) return false;
if (!myVFile.equals(fileNode.myVFile)) return false;
return true;
}
public int hashCode() {
return myFile.hashCode();
return myVFile.hashCode();
}
public boolean isValid() {
return myFile != null && myFile.isValid();
return myVFile != null && myVFile.isValid();
}
@Override
public boolean canSelectInLeftTree(final Map<PsiFile, Set<PsiFile>> deps) {
return deps.containsKey(myFile);
return deps.containsKey(getFile());
}
@Nullable
private PsiFile getFile() {
if (myFile == null) {
myFile = PsiManager.getInstance(myProject).findFile(myVFile);
}
return myFile;
}
}
@@ -79,7 +79,7 @@ public class FileTreeModelBuilder {
myShowModuleGroups = settings.UI_SHOW_MODULE_GROUPS && multiModuleProject;
myMarker = marker;
myAddUnmarkedFiles = !settings.UI_FILTER_LEGALS;
myRoot = new RootNode();
myRoot = new RootNode(myProject);
myFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
myPsiManager = PsiManager.getInstance(project);
}
@@ -190,28 +190,30 @@ public class FileTreeModelBuilder {
private void buildFileNode(PsiFile file) {
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
if (file == null || !file.isValid()) return;
final VirtualFile virtualFile = file.getVirtualFile();
if (indicator != null) {
indicator.setIndeterminate(false);
indicator.setText(AnalysisScopeBundle.message("package.dependencies.build.progress.text"));
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null) {
indicator.setText2(virtualFile.getPresentableUrl());
}
indicator.setFraction(((double)myScannedFileCount++) / myTotalFileCount);
}
if (file == null || !file.isValid()) return;
boolean isMarked = myMarker != null && myMarker.isMarked(file);
boolean isMarked = myMarker != null && myMarker.isMarked(virtualFile);
if (isMarked) myMarkedFileCount++;
if (isMarked || myAddUnmarkedFiles) {
PackageDependenciesNode dirNode = getFileParentNode(file);
if (myShowFiles) {
FileNode fileNode = new FileNode(file, isMarked);
FileNode fileNode = new FileNode(virtualFile, myProject, isMarked);
dirNode.add(fileNode);
}
else {
dirNode.addFile(file, isMarked);
dirNode.addFile(virtualFile, isMarked);
}
}
}
@@ -279,7 +281,7 @@ public class FileTreeModelBuilder {
@Nullable
public PackageDependenciesNode addFileNode(final PsiFile file){
boolean isMarked = myMarker != null && myMarker.isMarked(file);
boolean isMarked = myMarker != null && myMarker.isMarked(file.getVirtualFile());
if (!isMarked) return null;
final VirtualFile vFile = file.getVirtualFile();
@@ -301,7 +303,7 @@ public class FileTreeModelBuilder {
}
PackageDependenciesNode dirNode = getFileParentNode(file);
dirNode.add(new FileNode(file, isMarked));
dirNode.add(new FileNode(vFile, myProject, isMarked));
return rootToReload;
}
@@ -461,7 +463,7 @@ public class FileTreeModelBuilder {
private PackageDependenciesNode getParentModuleGroup(String[] groupPath){
ModuleGroupNode groupNode = myModuleGroupNodes.get(groupPath[groupPath.length - 1]);
if (groupNode == null) {
groupNode = new ModuleGroupNode(new ModuleGroup(groupPath));
groupNode = new ModuleGroupNode(new ModuleGroup(groupPath), myProject);
myModuleGroupNodes.put(groupPath[groupPath.length - 1], groupNode);
myRoot.add(groupNode);
}
@@ -20,8 +20,8 @@
*/
package com.intellij.packageDependencies.ui;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.vfs.VirtualFile;
public interface Marker {
boolean isMarked(PsiFile file);
boolean isMarked(VirtualFile file);
}
@@ -18,6 +18,7 @@ package com.intellij.packageDependencies.ui;
import com.intellij.analysis.AnalysisScopeBundle;
import com.intellij.ide.projectView.impl.ModuleGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiFile;
import com.intellij.util.PlatformIcons;
@@ -32,8 +33,9 @@ import java.util.Set;
public class ModuleGroupNode extends PackageDependenciesNode {
private final ModuleGroup myModuleGroup;
public ModuleGroupNode(ModuleGroup moduleGroup) {
myModuleGroup = moduleGroup;
public ModuleGroupNode(ModuleGroup moduleGroup, Project project) {
super(project);
myModuleGroup = moduleGroup;
}
public void fillFiles(Set<PsiFile> set, boolean recursively) {
@@ -30,6 +30,7 @@ public class ModuleNode extends PackageDependenciesNode implements NavigatableWi
private final Module myModule;
public ModuleNode(Module module) {
super(module.getProject());
myModule = module;
}
@@ -25,6 +25,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.IconUtil;
import com.intellij.util.ui.EmptyIcon;
import org.jetbrains.annotations.Nullable;
@@ -40,12 +41,17 @@ import java.util.Set;
public class PackageDependenciesNode extends DefaultMutableTreeNode implements Navigatable{
private static final EmptyIcon EMPTY_ICON = new EmptyIcon(0, IconUtil.getEmptyIcon(false).getIconHeight());
private Set<PsiFile> myRegisteredFiles = null;
private Set<VirtualFile> myRegisteredFiles = null;
private boolean myHasUnmarked = false;
private boolean myHasMarked = false;
private boolean myEquals;
protected Color myColor = null;
protected final static Color NOT_CHANGED = new Color(0, 0, 0);
protected Project myProject;
public PackageDependenciesNode(Project project) {
myProject = project;
}
public void setEquals(final boolean equals) {
myEquals = equals;
@@ -56,14 +62,16 @@ public class PackageDependenciesNode extends DefaultMutableTreeNode implements N
}
public void fillFiles(Set<PsiFile> set, boolean recursively) {
for (PsiFile psiFile : getRegisteredFiles()) {
final PsiManager psiManager = PsiManager.getInstance(myProject);
for (VirtualFile vFile : getRegisteredFiles()) {
final PsiFile psiFile = psiManager.findFile(vFile);
if (psiFile != null && psiFile.isValid()) {
set.add(psiFile);
}
}
}
public void addFile(PsiFile file, boolean isMarked) {
public void addFile(VirtualFile file, boolean isMarked) {
getRegisteredFiles().add(file);
updateMarked(!isMarked, isMarked);
}
@@ -187,9 +195,9 @@ public class PackageDependenciesNode extends DefaultMutableTreeNode implements N
return true;
}
public Set<PsiFile> getRegisteredFiles() {
public Set<VirtualFile> getRegisteredFiles() {
if (myRegisteredFiles == null) {
myRegisteredFiles = new HashSet<PsiFile>();
myRegisteredFiles = new HashSet<VirtualFile>();
}
return myRegisteredFiles;
}
@@ -16,11 +16,16 @@
package com.intellij.packageDependencies.ui;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import java.util.Set;
public class RootNode extends PackageDependenciesNode {
public RootNode(Project project) {
super(project);
}
public boolean equals(Object obj) {
return obj instanceof RootNode;
}