From 896dcf99a3e9c44e3c2f6820472885db214ef1ec Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 21 Jul 2011 11:49:02 +0400 Subject: [PATCH] scopes: use vFiles instead of psi --- .../cyclicDependencies/ui/CycleNode.java | 10 +++- .../ui/CyclicDependenciesPanel.java | 9 +-- .../ClassesScopeTreeStructureExpander.java | 2 +- .../ui/GeneralGroupNode.java | 4 +- .../packageDependencies/ui/LibraryNode.java | 4 +- .../packageDependencies/ui/PackageNode.java | 1 + .../ui/TreeModelBuilder.java | 60 +++++++------------ .../scope/packageSet/PatternPackageSet.java | 41 ++++++------- .../psi/search/GlobalSearchScope.java | 15 ++--- .../search/scope/NonProjectFilesScope.java | 5 +- .../psi/search/scope/ProjectFilesScope.java | 4 +- .../search/scope/ProjectProductionScope.java | 13 ++-- .../intellij/psi/search/scope/TestsScope.java | 8 +-- .../scope/packageSet/AbstractPackageSet.java | 4 +- .../packageSet/ComplementPackageSet.java | 9 +-- .../packageSet/FilePatternPackageSet.java | 12 ++-- .../packageSet/IntersectionPackageSet.java | 13 ++-- .../packageSet/NamedPackageSetReference.java | 10 ++-- .../scope/packageSet/PackageSetBase.java | 38 ++++++++++++ .../packageSet/PatternBasedPackageSet.java | 8 +-- .../scope/packageSet/UnionPackageSet.java | 10 ++-- .../scopeView/ScopePaneSelectInTarget.java | 17 +++--- .../ide/scopeView/ScopeTreeViewPanel.java | 5 +- .../ide/scopeView/nodes/BasePsiNode.java | 1 + .../util/scopeChooser/ScopeEditorPanel.java | 12 ++-- .../ChangeListsScopesProvider.java | 14 +---- .../DefaultScopesProvider.java | 10 ++-- .../ui/DependenciesPanel.java | 4 +- .../packageDependencies/ui/DirectoryNode.java | 1 + .../packageDependencies/ui/FileNode.java | 43 +++++++------ .../ui/FileTreeModelBuilder.java | 20 ++++--- .../packageDependencies/ui/Marker.java | 4 +- .../ui/ModuleGroupNode.java | 6 +- .../packageDependencies/ui/ModuleNode.java | 1 + .../ui/PackageDependenciesNode.java | 18 ++++-- .../packageDependencies/ui/RootNode.java | 5 ++ 36 files changed, 246 insertions(+), 195 deletions(-) create mode 100644 platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PackageSetBase.java diff --git a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CycleNode.java b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CycleNode.java index e3c79a21ee7c..937a3eba2505 100644 --- a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CycleNode.java +++ b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CycleNode.java @@ -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 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); } diff --git a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java index ee37cf4755b0..d592b9581cac 100644 --- a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java +++ b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java @@ -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); diff --git a/java/java-impl/src/com/intellij/ide/scopeView/ClassesScopeTreeStructureExpander.java b/java/java-impl/src/com/intellij/ide/scopeView/ClassesScopeTreeStructureExpander.java index a08337dbe6e5..88c7ed07badb 100644 --- a/java/java-impl/src/com/intellij/ide/scopeView/ClassesScopeTreeStructureExpander.java +++ b/java/java-impl/src/com/intellij/ide/scopeView/ClassesScopeTreeStructureExpander.java @@ -134,7 +134,7 @@ public class ClassesScopeTreeStructureExpander implements ScopeTreeStructureExpa if (fileNodes == null) { fileNodes = new HashSet(); } - fileNodes.add(new FileNode(containingFile, true)); + fileNodes.add(new FileNode(containingFile.getVirtualFile(), myProject, true)); } node.remove(classNode); } diff --git a/java/java-impl/src/com/intellij/packageDependencies/ui/GeneralGroupNode.java b/java/java-impl/src/com/intellij/packageDependencies/ui/GeneralGroupNode.java index c5264bc24fc7..19f82981d16e 100644 --- a/java/java-impl/src/com/intellij/packageDependencies/ui/GeneralGroupNode.java +++ b/java/java-impl/src/com/intellij/packageDependencies/ui/GeneralGroupNode.java @@ -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; diff --git a/java/java-impl/src/com/intellij/packageDependencies/ui/LibraryNode.java b/java/java-impl/src/com/intellij/packageDependencies/ui/LibraryNode.java index b2e8dc17d5d4..fef1b6b4e63b 100644 --- a/java/java-impl/src/com/intellij/packageDependencies/ui/LibraryNode.java +++ b/java/java-impl/src/com/intellij/packageDependencies/ui/LibraryNode.java @@ -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; } diff --git a/java/java-impl/src/com/intellij/packageDependencies/ui/PackageNode.java b/java/java-impl/src/com/intellij/packageDependencies/ui/PackageNode.java index b1525453ad1b..ecc137de5c3b 100644 --- a/java/java-impl/src/com/intellij/packageDependencies/ui/PackageNode.java +++ b/java/java-impl/src/com/intellij/packageDependencies/ui/PackageNode.java @@ -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) { diff --git a/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java b/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java index 3f6b99df382e..8529f7ec4ff4 100644 --- a/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java +++ b/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java @@ -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 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); diff --git a/java/openapi/src/com/intellij/psi/search/scope/packageSet/PatternPackageSet.java b/java/openapi/src/com/intellij/psi/search/scope/packageSet/PatternPackageSet.java index d120ff4a2276..78040a3bea3a 100644 --- a/java/openapi/src/com/intellij/psi/search/scope/packageSet/PatternPackageSet.java +++ b/java/openapi/src/com/intellij/psi/search/scope/packageSet/PatternPackageSet.java @@ -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() { diff --git a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScope.java b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScope.java index a679ee1748fb..7bde88aaab5a 100644 --- a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScope.java +++ b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScope.java @@ -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() { diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/NonProjectFilesScope.java b/platform/lang-api/src/com/intellij/psi/search/scope/NonProjectFilesScope.java index 8e1389591999..e7a9c5557845 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/NonProjectFilesScope.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/NonProjectFilesScope.java @@ -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); diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/ProjectFilesScope.java b/platform/lang-api/src/com/intellij/psi/search/scope/ProjectFilesScope.java index f989d8972b94..1832154cd700 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/ProjectFilesScope.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/ProjectFilesScope.java @@ -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() diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/ProjectProductionScope.java b/platform/lang-api/src/com/intellij/psi/search/scope/ProjectProductionScope.java index dae01ca10b4f..6a5f41290683 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/ProjectProductionScope.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/ProjectProductionScope.java @@ -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); } }); } diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/TestsScope.java b/platform/lang-api/src/com/intellij/psi/search/scope/TestsScope.java index 5f474bffbb64..42e31d5a8802 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/TestsScope.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/TestsScope.java @@ -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); } }); } diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/AbstractPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/AbstractPackageSet.java index 4010d3a04325..0bf2ca76b74b 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/AbstractPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/AbstractPackageSet.java @@ -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; } diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/ComplementPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/ComplementPackageSet.java index f9536b1887f8..5294ce11dd3b 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/ComplementPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/ComplementPackageSet.java @@ -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() { diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/FilePatternPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/FilePatternPackageSet.java index b1824bf43a54..6a809dd37970 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/FilePatternPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/FilePatternPackageSet.java @@ -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){ diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/IntersectionPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/IntersectionPackageSet.java index 11526b528efb..49478442199a 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/IntersectionPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/IntersectionPackageSet.java @@ -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() { diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/NamedPackageSetReference.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/NamedPackageSetReference.java index b080c2f52c44..c344bfbebbff 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/NamedPackageSetReference.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/NamedPackageSetReference.java @@ -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; } diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PackageSetBase.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PackageSetBase.java new file mode 100644 index 000000000000..eb3f50a5f114 --- /dev/null +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PackageSetBase.java @@ -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); + } +} diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PatternBasedPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PatternBasedPackageSet.java index 34aaace526fa..e6f6624c5a18 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PatternBasedPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/PatternBasedPackageSet.java @@ -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); } diff --git a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/UnionPackageSet.java b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/UnionPackageSet.java index 8a227836c881..52fedd70caab 100644 --- a/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/UnionPackageSet.java +++ b/platform/lang-api/src/com/intellij/psi/search/scope/packageSet/UnionPackageSet.java @@ -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() { diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopePaneSelectInTarget.java b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopePaneSelectInTarget.java index 9e17c8414482..719eacc2ce3d 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopePaneSelectInTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopePaneSelectInTarget.java @@ -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; } } diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java index 2dda254d55b2..5401107960f2 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java @@ -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))); diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/nodes/BasePsiNode.java b/platform/lang-impl/src/com/intellij/ide/scopeView/nodes/BasePsiNode.java index f5b839241b37..3e891ca1fc79 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/nodes/BasePsiNode.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/nodes/BasePsiNode.java @@ -38,6 +38,7 @@ public class BasePsiNode 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(); diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java index 2e879a8ac31f..ba19a53c7dca 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java @@ -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())); } }; diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ChangeListsScopesProvider.java b/platform/lang-impl/src/com/intellij/packageDependencies/ChangeListsScopesProvider.java index 83afbc356179..1588026db782 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ChangeListsScopesProvider.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ChangeListsScopesProvider.java @@ -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 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 diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/DefaultScopesProvider.java b/platform/lang-impl/src/com/intellij/packageDependencies/DefaultScopesProvider.java index c18aed8e50af..8bef41c38291 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/DefaultScopesProvider.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/DefaultScopesProvider.java @@ -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; } }); diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java index 5ac0ad80e45f..79d313a031bd 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java @@ -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); } }; diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DirectoryNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DirectoryNode.java index ef0888a3517a..2b7fa12eba46 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DirectoryNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DirectoryNode.java @@ -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(); diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileNode.java index c6865e53518c..079896445180 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileNode.java @@ -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 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> deps) { - return deps.containsKey(myFile); + return deps.containsKey(getFile()); + } + + @Nullable + private PsiFile getFile() { + if (myFile == null) { + myFile = PsiManager.getInstance(myProject).findFile(myVFile); + } + return myFile; } } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java index 939f0b18a6eb..af7761a48c5a 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java @@ -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); } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/Marker.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/Marker.java index cacf5101e564..fe05a7ba0af6 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/Marker.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/Marker.java @@ -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); } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleGroupNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleGroupNode.java index 64a577e3df99..0e1f49203408 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleGroupNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleGroupNode.java @@ -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 set, boolean recursively) { diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java index a8768a9235cc..cef04e9d092a 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java @@ -30,6 +30,7 @@ public class ModuleNode extends PackageDependenciesNode implements NavigatableWi private final Module myModule; public ModuleNode(Module module) { + super(module.getProject()); myModule = module; } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/PackageDependenciesNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/PackageDependenciesNode.java index 43238c7da12f..cd741209e8fb 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/PackageDependenciesNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/PackageDependenciesNode.java @@ -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 myRegisteredFiles = null; + private Set 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 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 getRegisteredFiles() { + public Set getRegisteredFiles() { if (myRegisteredFiles == null) { - myRegisteredFiles = new HashSet(); + myRegisteredFiles = new HashSet(); } return myRegisteredFiles; } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/RootNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/RootNode.java index 8667f7d36144..49fa517fbb33 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/RootNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/RootNode.java @@ -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; }