Merge remote-tracking branch 'origin/master' into develar/is
[idea/community.git] / platform / analysis-impl / src / com / intellij / codeInspection / ex / GlobalInspectionContextUtil.java
1 /*
2  * Copyright 2000-2013 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.codeInspection.ex;
17
18 import com.intellij.codeInspection.GlobalInspectionContext;
19 import com.intellij.codeInspection.InspectionProfileEntry;
20 import com.intellij.codeInspection.lang.InspectionExtensionsFactory;
21 import com.intellij.codeInspection.reference.RefElement;
22 import com.intellij.codeInspection.reference.RefElementImpl;
23 import com.intellij.lang.injection.InjectedLanguageManager;
24 import com.intellij.openapi.extensions.Extensions;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.profile.ProfileManager;
27 import com.intellij.psi.PsiElement;
28 import com.intellij.psi.PsiFile;
29 import com.intellij.psi.search.scope.packageSet.NamedScope;
30 import org.jetbrains.annotations.NotNull;
31
32 public class GlobalInspectionContextUtil {
33   public static RefElement retrieveRefElement(@NotNull PsiElement element, @NotNull GlobalInspectionContext globalContext) {
34     PsiFile elementFile = element.getContainingFile();
35     RefElement refElement = globalContext.getRefManager().getReference(elementFile);
36     if (refElement == null) {
37       PsiElement context = InjectedLanguageManager.getInstance(elementFile.getProject()).getInjectionHost(elementFile);
38       if (context != null) refElement = globalContext.getRefManager().getReference(context.getContainingFile());
39     }
40     return refElement;
41   }
42
43
44   public static boolean isToCheckMember(@NotNull RefElement owner, @NotNull InspectionProfileEntry tool, Tools tools, ProfileManager profileManager) {
45     return isToCheckFile(((RefElementImpl)owner).getContainingFile(), tool, tools, profileManager) && !((RefElementImpl)owner).isSuppressed(tool.getShortName(), tool.getAlternativeID());
46   }
47
48   public static boolean isToCheckFile(PsiFile file, @NotNull InspectionProfileEntry tool, Tools tools, ProfileManager profileManager) {
49     if (tools != null && file != null) {
50       for (ScopeToolState state : tools.getTools()) {
51         final NamedScope namedScope = state.getScope(file.getProject());
52         if (namedScope == null || namedScope.getValue().contains(file, profileManager.getScopesManager())) {
53           if (state.isEnabled()) {
54             InspectionToolWrapper toolWrapper = state.getTool();
55             if (toolWrapper.getTool() == tool) return true;
56           }
57           return false;
58         }
59       }
60     }
61     return false;
62   }
63
64
65   public static boolean canRunInspections(@NotNull Project project, final boolean online) {
66     for (InspectionExtensionsFactory factory : Extensions.getExtensions(InspectionExtensionsFactory.EP_NAME)) {
67       if (!factory.isProjectConfiguredToRunInspections(project, online)) {
68         return false;
69       }
70     }
71     return true;
72   }
73 }