mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
scopes: use vFiles instead of psi
This commit is contained in:
@@ -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);
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -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() {
|
||||
|
||||
+5
-7
@@ -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){
|
||||
|
||||
+9
-4
@@ -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() {
|
||||
|
||||
+6
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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()));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+3
-11
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+11
-9
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+13
-5
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user