lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / psi / search / PsiSearchScopeUtil.java
1 /*
2  * Copyright 2000-2007 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 package com.intellij.psi.search;
17
18 import com.intellij.openapi.vfs.VirtualFile;
19 import com.intellij.psi.PsiElement;
20 import com.intellij.psi.PsiFile;
21 import com.intellij.psi.util.PsiTreeUtil;
22 import org.jetbrains.annotations.NotNull;
23
24 public class PsiSearchScopeUtil {
25   /**
26    * @deprecated
27    * Use com.intellij.psi.search.SearchScope#union(com.intellij.psi.search.SearchScope)
28    */
29   @Deprecated
30   @NotNull
31   public static SearchScope scopesUnion(@NotNull SearchScope scope1, @NotNull SearchScope scope2) {
32     return scope1.union(scope2);
33   }
34
35   public static boolean isInScope(@NotNull SearchScope scope, @NotNull PsiElement element) {
36     if (scope instanceof LocalSearchScope) {
37       LocalSearchScope local = (LocalSearchScope)scope;
38       return isInScope(local, element);
39     }
40     else {
41       GlobalSearchScope globalScope = (GlobalSearchScope)scope;
42       return isInScope(globalScope, element);
43     }
44   }
45
46   public static boolean isInScope(@NotNull GlobalSearchScope globalScope, @NotNull PsiElement element) {
47     PsiFile file = element.getContainingFile();
48     if (file == null) {
49       return true;
50     }
51     final PsiElement context = file.getContext();
52     if (context != null) file = context.getContainingFile();
53     if (file == null) return false;
54     VirtualFile virtualFile = file.getVirtualFile();
55     return virtualFile == null || globalScope.contains(file.getVirtualFile());
56   }
57
58   public static boolean isInScope(@NotNull LocalSearchScope local, @NotNull PsiElement element) {
59     PsiElement[] scopeElements = local.getScope();
60     for (final PsiElement scopeElement : scopeElements) {
61       if (PsiTreeUtil.isAncestor(scopeElement, element, false)) return true;
62     }
63     return false;
64   }
65 }