separate pattern from scopes holders when possible: this would allow to use default patterns e.g. production with application level inspection profile (IDEA-107786)

This commit is contained in:
Anna Kozlova
2013-05-27 13:35:23 +04:00
parent 6c9f7b4123
commit fa528593c9
20 changed files with 111 additions and 27 deletions
@@ -73,7 +73,11 @@ public class PatternPackageSet extends PatternBasedPackageSet {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
Project project = holder.getProject();
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
return matchesScope(file, holder.getProject(), fileIndex) && (myPattern == null || myPattern.matcher(getPackageName(file, fileIndex)).matches());
}
@@ -79,7 +79,7 @@ public class GlobalSearchScopes {
NamedScopesHolder holder = NamedScopeManager.getInstance(getProject());
final PackageSet packageSet = mySet.getValue();
if (packageSet != null) {
if (packageSet instanceof PackageSetBase) return ((PackageSetBase)packageSet).contains(file, holder);
if (packageSet instanceof PackageSetBase) return ((PackageSetBase)packageSet).contains(file, getProject(), holder);
PsiFile psiFile = myManager.findFile(file);
return psiFile != null && packageSet.contains(psiFile, holder);
}
@@ -25,6 +25,7 @@ import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.ui.Colored;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.Nullable;
/**
* @author Konstantin Bulenkov
@@ -37,10 +38,15 @@ public class NonProjectFilesScope extends NamedScope {
super(NAME, new AbstractPackageSet("NonProject") {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
if (file == null) return true;
if (file.getFileSystem() != LocalFileSystem.getInstance()) return true;
if (isInsideProjectContent(holder.getProject(), file)) return false;
return !ProjectScope.getProjectScope(holder.getProject()).contains(file);
if (isInsideProjectContent(project, file)) return false;
return !ProjectScope.getProjectScope(project).contains(file);
}
});
}
@@ -15,12 +15,14 @@
*/
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.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import org.jetbrains.annotations.Nullable;
/**
* @author Konstantin Bulenkov
@@ -31,8 +33,13 @@ public class ProjectFilesScope extends NamedScope {
super(NAME, new AbstractPackageSet("ProjectFiles") {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
if (file == null) return false;
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
return holder.getProject().isInitialized()
&& !fileIndex.isIgnored(file)
&& fileIndex.getContentRootForFile(file) != null;
@@ -16,12 +16,14 @@
package com.intellij.psi.search.scope;
import com.intellij.ide.IdeBundle;
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.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import org.jetbrains.annotations.Nullable;
/**
* @author Konstantin Bulenkov
@@ -31,7 +33,12 @@ public class ProjectProductionScope extends NamedScope {
super(IdeBundle.message("predefined.scope.production.name"), new AbstractPackageSet("src:*..*") {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
return file != null
&& !index.isInTestSourceContent(file)
&& !index.isInLibraryClasses(file)
@@ -16,6 +16,7 @@
package com.intellij.psi.search.scope;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
@@ -23,6 +24,7 @@ import com.intellij.psi.search.scope.packageSet.AbstractPackageSet;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
import com.intellij.ui.Colored;
import org.jetbrains.annotations.Nullable;
/**
* @author Konstantin Bulenkov
@@ -32,9 +34,15 @@ public class TestsScope extends NamedScope {
public static final String NAME = IdeBundle.message("predefined.scope.tests.name");
public TestsScope() {
super(NAME, new AbstractPackageSet("test:*..*") {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(holder.getProject()).getFileIndex();
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
return file != null && index.isInTestSourceContent(file);
}
});
@@ -15,8 +15,10 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ComplementPackageSet extends PackageSetBase {
private final PackageSet myComplementarySet;
@@ -27,8 +29,13 @@ public class ComplementPackageSet extends PackageSetBase {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return myComplementarySet instanceof PackageSetBase ? !((PackageSetBase)myComplementarySet).contains(file, holder)
: myComplementarySet.contains(getPsiFile(file, holder), holder);
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
return myComplementarySet instanceof PackageSetBase ? !((PackageSetBase)myComplementarySet).contains(file, project, holder)
: myComplementarySet.contains(getPsiFile(file, project), holder);
}
@Override
@@ -69,7 +69,11 @@ public class FilePatternPackageSet extends PatternBasedPackageSet {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
Project project = holder.getProject();
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
return file != null && fileMatcher(file, fileIndex, holder.getProjectBaseDir()) &&
matchesModule(myModuleGroupPattern, myModulePattern, file, fileIndex);
@@ -15,8 +15,10 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class IntersectionPackageSet extends PackageSetBase {
private final PackageSet myFirstSet;
@@ -29,8 +31,13 @@ public class IntersectionPackageSet extends PackageSetBase {
@Override
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 contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
if (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, project, holder) : myFirstSet.contains(getPsiFile(file, project), holder)) {
if (mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, project, holder) : mySecondSet.contains(getPsiFile(file, project), holder)) {
return true;
}
}
@@ -27,11 +27,12 @@ public class NamedPackageSetReference extends PackageSetBase {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
if (holder == null) return false;
final NamedScope scope = holder.getScope(myName);
if (scope != null) {
final PackageSet packageSet = scope.getValue();
if (packageSet != null) {
return packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(getPsiFile(file, holder), holder);
return packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(getPsiFile(file, holder.getProject()), holder);
}
}
return false;
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
@@ -24,15 +25,31 @@ import org.jetbrains.annotations.Nullable;
* User: anna
*/
public abstract class PackageSetBase implements PackageSet {
/**
* @see PackageSetBase#contains(com.intellij.openapi.vfs.VirtualFile, com.intellij.psi.search.scope.packageSet.NamedScopesHolder)
*/
@Deprecated
public abstract boolean contains(VirtualFile file, NamedScopesHolder holder);
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
return contains(file, holder);
}
@Override
public boolean contains(PsiFile file, NamedScopesHolder holder) {
return contains(file.getVirtualFile(), holder);
return contains(file.getVirtualFile(), file.getProject(), holder);
}
/**
* @see PackageSetBase#getPsiFile(com.intellij.openapi.vfs.VirtualFile, com.intellij.psi.search.scope.packageSet.NamedScopesHolder)
*/
@Deprecated
@Nullable
public static PsiFile getPsiFile(VirtualFile file, NamedScopesHolder holder) {
return PsiManager.getInstance(holder.getProject()).findFile(file);
}
@Nullable
public static PsiFile getPsiFile(VirtualFile file, Project project) {
return PsiManager.getInstance(project).findFile(file);
}
}
@@ -15,8 +15,10 @@
*/
package com.intellij.psi.search.scope.packageSet;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class UnionPackageSet extends PackageSetBase {
private final PackageSet myFirstSet;
@@ -29,8 +31,13 @@ public class UnionPackageSet extends PackageSetBase {
@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));
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
return (myFirstSet instanceof PackageSetBase ? ((PackageSetBase)myFirstSet).contains(file, project, holder) : myFirstSet.contains(getPsiFile(file, project), holder)) ||
(mySecondSet instanceof PackageSetBase ? ((PackageSetBase)mySecondSet).contains(file, project, holder) : mySecondSet.contains(getPsiFile(file, project), holder));
}
@Override
@@ -79,7 +79,7 @@ public class ScopePaneSelectInTarget extends ProjectViewSelectInTarget {
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)) {
if (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(virtualFile, myProject, holder) : packageSet.contains(PackageSetBase.getPsiFile(virtualFile, myProject), holder)) {
return true;
}
}
@@ -332,7 +332,7 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable {
myBuilder = new FileTreeModelBuilder(myProject, new Marker() {
@Override
public boolean isMarked(VirtualFile file) {
return packageSet != null && (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, holder) : packageSet.contains(PackageSetBase.getPsiFile(file, holder), holder));
return packageSet != null && (packageSet instanceof PackageSetBase ? ((PackageSetBase)packageSet).contains(file, myProject, holder) : packageSet.contains(PackageSetBase.getPsiFile(file, myProject), holder));
}
}, settings);
myTree.setPaintBusy(true);
@@ -812,7 +812,7 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable {
if (virtualFile != null) {
final ProjectView projectView = ProjectView.getInstance(myProject);
final NamedScopesHolder holder = NamedScopesHolder.getHolder(myProject, CURRENT_SCOPE_NAME, myDependencyValidationManager);
if (packageSet instanceof PackageSetBase && !((PackageSetBase)packageSet).contains(virtualFile, holder) ||
if (packageSet instanceof PackageSetBase && !((PackageSetBase)packageSet).contains(virtualFile, myProject, holder) ||
psiFile != null && !packageSet.contains(psiFile, holder)) {
projectView.changeView(ProjectViewPane.ID);
}
@@ -203,7 +203,7 @@ public class ScopeViewPane extends AbstractProjectViewPane {
private boolean changeView(final PackageSet packageSet, final PsiElement element, final PsiFileSystemItem psiFileSystemItem, final String name, final NamedScopesHolder holder,
boolean requestFocus) {
if ((packageSet instanceof PackageSetBase && ((PackageSetBase)packageSet).contains(psiFileSystemItem.getVirtualFile(), holder)) ||
if ((packageSet instanceof PackageSetBase && ((PackageSetBase)packageSet).contains(psiFileSystemItem.getVirtualFile(), myProject, holder)) ||
(psiFileSystemItem instanceof PsiFile && packageSet.contains((PsiFile)psiFileSystemItem, holder))) {
if (!name.equals(getSubId())) {
myProjectView.changeView(getId(), name);
@@ -86,7 +86,7 @@ public class ScopeEditorPanel {
private PanelProgressIndicator myCurrentProgress;
private NamedScopesHolder myHolder;
public ScopeEditorPanel(Project project, final NamedScopesHolder holder) {
public ScopeEditorPanel(final Project project, final NamedScopesHolder holder) {
myProject = project;
myHolder = holder;
@@ -105,8 +105,8 @@ public class ScopeEditorPanel {
myTreeMarker = new Marker() {
@Override
public boolean isMarked(VirtualFile file) {
return myCurrentScope != null && (myCurrentScope instanceof PackageSetBase ? ((PackageSetBase)myCurrentScope).contains(file, myHolder)
: myCurrentScope.contains(PackageSetBase.getPsiFile(file, myHolder), myHolder));
return myCurrentScope != null && (myCurrentScope instanceof PackageSetBase ? ((PackageSetBase)myCurrentScope).contains(file, project, myHolder)
: myCurrentScope.contains(PackageSetBase.getPsiFile(file, myProject), myHolder));
}
};
@@ -52,7 +52,12 @@ public class DefaultScopesProvider extends CustomScopesProviderEx {
myProblemsScope = new NamedScope(IdeBundle.message("predefined.scope.problems.name"), new AbstractPackageSet(text) {
@Override
public boolean contains(VirtualFile file, NamedScopesHolder holder) {
return holder.getProject() == myProject
return contains(file, holder.getProject(), holder);
}
@Override
public boolean contains(VirtualFile file, Project project, @Nullable NamedScopesHolder holder) {
return project == myProject
&& WolfTheProblemSolver.getInstance(myProject).isProblemFile(file);
}
});
@@ -250,7 +250,7 @@ public class FileColorsModel implements Cloneable {
if (scope != null) {
final NamedScopesHolder namedScopesHolder = NamedScopesHolder.getHolder(myProject, configuration.getScopeName(), null);
final PackageSet packageSet = scope.getValue();
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, namedScopesHolder)) {
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, myProject, namedScopesHolder)) {
return configuration;
}
}
@@ -261,7 +261,7 @@ public class FileColorsModel implements Cloneable {
if (scope != null) {
final NamedScopesHolder namedScopesHolder = NamedScopesHolder.getHolder(myProject, configuration.getScopeName(), null);
final PackageSet packageSet = scope.getValue();
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, namedScopesHolder)) {
if (packageSet instanceof PackageSetBase && namedScopesHolder != null && ((PackageSetBase)packageSet).contains(colored, myProject, namedScopesHolder)) {
return configuration;
}
}
@@ -139,4 +139,8 @@ public abstract class FileOrDirectoryTreeNode extends AbstractTreeNode implement
@Override
public void dispose() {
}
public Project getProject() {
return myProject;
}
}
@@ -62,7 +62,7 @@ public class FileTreeNode extends FileOrDirectoryTreeNode {
return false;
}
VirtualFile file = filePointer.getFile();
if (file != null && file.isValid() && filter.first.contains(file, filter.second)) {
if (file != null && file.isValid() && filter.first.contains(file, getProject(), filter.second)) {
applyFilter(true);
return true;
}