[maven] IDEA-273910 IJ-CR-12214 IDE wrongly imports default pom.xml
[idea/community.git] / platform / analysis-impl / src / com / intellij / codeInspection / ex / LocalInspectionToolWrapper.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.codeInspection.ex;
3
4 import com.intellij.codeInspection.*;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
7 import com.intellij.psi.PsiElement;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 public class LocalInspectionToolWrapper extends InspectionToolWrapper<LocalInspectionTool, LocalInspectionEP> {
12   /** This should be used in tests primarily */
13   public LocalInspectionToolWrapper(@NotNull LocalInspectionTool tool) {
14     super(tool, LocalInspectionEP.LOCAL_INSPECTION.getByKey(tool.getShortName(), LocalInspectionToolWrapper.class, InspectionEP::getShortName));
15   }
16
17   public LocalInspectionToolWrapper(@NotNull LocalInspectionEP ep) {
18     super(ep);
19   }
20
21   private LocalInspectionToolWrapper(@NotNull LocalInspectionToolWrapper other) {
22     super(other);
23   }
24
25   @Override
26   public @NotNull LocalInspectionToolWrapper createCopy() {
27     return new LocalInspectionToolWrapper(this);
28   }
29
30   @Override
31   public JobDescriptor @NotNull [] getJobDescriptors(@NotNull GlobalInspectionContext context) {
32     return context.getStdJobDescriptors().LOCAL_ANALYSIS_ARRAY;
33   }
34
35   public boolean isUnfair() {
36     return myEP == null ? getTool() instanceof UnfairLocalInspectionTool : myEP.unfair;
37   }
38
39   public boolean isDynamicGroup() {
40     return myEP == null ? getTool() instanceof DynamicGroupTool : myEP.dynamicGroup;
41   }
42
43   @Override
44   public @NotNull String getID() {
45     return myEP == null ? getTool().getID() : myEP.id == null ? myEP.getShortName() : myEP.id;
46   }
47
48   public @Nullable String getAlternativeID() {
49     return myEP == null ? getTool().getAlternativeID() : myEP.alternativeId;
50   }
51
52   public boolean runForWholeFile() {
53     return myEP == null ? getTool().runForWholeFile() : myEP.runForWholeFile;
54   }
55
56   public static @Nullable InspectionToolWrapper<?, ?> findTool2RunInBatch(@NotNull Project project,
57                                                                           @Nullable PsiElement element,
58                                                                           @NotNull String name) {
59     InspectionProfile inspectionProfile = InspectionProjectProfileManager.getInstance(project).getCurrentProfile();
60     InspectionToolWrapper<?, ?> toolWrapper = element == null
61                                               ? inspectionProfile.getInspectionTool(name, project)
62                                               : inspectionProfile.getInspectionTool(name, element);
63     return findTool2RunInBatch(project, element, inspectionProfile, toolWrapper);
64   }
65
66   public static @Nullable InspectionToolWrapper<?, ?> findTool2RunInBatch(@NotNull Project project,
67                                                                           @Nullable PsiElement element,
68                                                                           @NotNull InspectionProfile inspectionProfile,
69                                                                           @Nullable InspectionToolWrapper<?, ?> toolWrapper) {
70     if (toolWrapper instanceof LocalInspectionToolWrapper && ((LocalInspectionToolWrapper)toolWrapper).isUnfair()) {
71       LocalInspectionTool inspectionTool = ((LocalInspectionToolWrapper)toolWrapper).getTool();
72       if (inspectionTool instanceof PairedUnfairLocalInspectionTool) {
73         String oppositeShortName = ((PairedUnfairLocalInspectionTool)inspectionTool).getInspectionForBatchShortName();
74         return element == null ? inspectionProfile.getInspectionTool(oppositeShortName, project)
75                                : inspectionProfile.getInspectionTool(oppositeShortName, element);
76       }
77       return null;
78     }
79     return toolWrapper;
80   }
81 }