IDEA-274004 bump cmake.presets version after changes in RoundedInt
[idea/community.git] / platform / analysis-impl / src / com / intellij / codeInspection / ex / ExternalAnnotatorBatchInspection.java
1 /*
2  * Copyright 2000-2017 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.ExternalAnnotatorInspectionVisitor;
19 import com.intellij.codeInspection.GlobalInspectionContext;
20 import com.intellij.codeInspection.InspectionManager;
21 import com.intellij.codeInspection.ProblemDescriptor;
22 import com.intellij.lang.ExternalLanguageAnnotators;
23 import com.intellij.lang.Language;
24 import com.intellij.lang.annotation.ExternalAnnotator;
25 import com.intellij.openapi.application.ReadAction;
26 import com.intellij.psi.FileViewProvider;
27 import com.intellij.psi.PsiFile;
28 import org.jetbrains.annotations.NotNull;
29
30 import java.util.List;
31 import java.util.Set;
32
33 public interface ExternalAnnotatorBatchInspection extends PairedUnfairLocalInspectionTool {
34   @NotNull
35   String getShortName();
36
37   @NotNull
38   @Override
39   default String getInspectionForBatchShortName() {
40     return getShortName();
41   }
42
43   /**
44    * To be invoked during batch run
45    */
46   default ProblemDescriptor @NotNull [] checkFile(@NotNull PsiFile file,
47                                                   @NotNull GlobalInspectionContext context,
48                                                   @NotNull InspectionManager manager) {
49     final String shortName = getShortName();
50     final FileViewProvider viewProvider = file.getViewProvider();
51     final Set<Language> relevantLanguages = ReadAction.compute(() -> viewProvider.getLanguages());
52     for (Language language : relevantLanguages) {
53       PsiFile psiRoot = ReadAction.compute(() -> viewProvider.getPsi(language));
54       final List<ExternalAnnotator> externalAnnotators = ExternalLanguageAnnotators.allForFile(language, psiRoot);
55
56       for (ExternalAnnotator annotator : externalAnnotators) {
57         if (shortName.equals(annotator.getPairedBatchInspectionShortName())) {
58           return ExternalAnnotatorInspectionVisitor.checkFileWithExternalAnnotator(file, manager, false, annotator);
59         }
60       }
61     }
62     return ProblemDescriptor.EMPTY_ARRAY;
63   }
64 }