1e1f0d67afb520f45dcf19f736dbf6170f56a026
[idea/community.git] / platform / lang-impl / src / com / intellij / packageDependencies / DefaultScopesProvider.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * User: anna
19  * Date: 17-Jan-2008
20  */
21 package com.intellij.packageDependencies;
22
23 import com.intellij.ide.IdeBundle;
24 import com.intellij.openapi.extensions.Extensions;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.problems.WolfTheProblemSolver;
27 import com.intellij.psi.PsiFile;
28 import com.intellij.psi.search.scope.packageSet.*;
29 import org.jetbrains.annotations.NotNull;
30
31 import java.util.ArrayList;
32 import java.util.List;
33
34 public class DefaultScopesProvider implements CustomScopesProvider {
35   private static NamedScope myAllScope;
36   private NamedScope myProblemsScope;
37   private final Project myProject;
38
39   public static DefaultScopesProvider getInstance(Project project) {
40     for (CustomScopesProvider provider : Extensions.getExtensions(CUSTOM_SCOPES_PROVIDER, project)) {
41       if (provider instanceof DefaultScopesProvider) return (DefaultScopesProvider)provider;
42     }
43     return null;
44   }
45
46   public DefaultScopesProvider(Project project) {
47     myProject = project;
48   }
49
50   @NotNull
51   public List<NamedScope> getCustomScopes() {
52     final List<NamedScope> list = new ArrayList<NamedScope>();
53     list.add(getProblemsScope());
54     list.add(getAllScope());
55     return list;
56   }
57
58   public static NamedScope getAllScope() {
59     if (myAllScope == null) {
60       myAllScope = new NamedScope("All", new PackageSet() {
61         public boolean contains(final PsiFile file, final NamedScopesHolder holder) {
62           return true;
63         }
64
65         public PackageSet createCopy() {
66           return this;
67         }
68
69         public String getText() {
70           return FilePatternPackageSet.SCOPE_FILE + ":*//*";
71         }
72
73         public int getNodePriority() {
74           return 0;
75         }
76       });
77     }
78     return myAllScope;
79   }
80
81    public NamedScope getProblemsScope() {
82     if (myProblemsScope == null) {
83       myProblemsScope = new NamedScope(IdeBundle.message("predefined.scope.problems.name"), new PackageSet() {
84         public boolean contains(PsiFile file, NamedScopesHolder holder) {
85           return file.getProject() == myProject && WolfTheProblemSolver.getInstance(myProject).isProblemFile(file.getVirtualFile());
86         }
87
88         public PackageSet createCopy() {
89           return this;
90         }
91
92         public String getText() {
93           return FilePatternPackageSet.SCOPE_FILE + ":*//*";
94         }
95
96         public int getNodePriority() {
97           return 1;
98         }
99       });
100     }
101     return myProblemsScope;
102   }
103 }