IG: remove newline after modifier list if necessary (IDEA-162989)
[idea/community.git] / plugins / InspectionGadgets / InspectionGadgetsAnalysis / src / com / siyeh / ig / junit / JUnitDatapointInspection.java
1 /*
2  * Copyright 2000-2016 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.siyeh.ig.junit;
17
18 import com.intellij.codeInsight.AnnotationUtil;
19 import com.intellij.openapi.util.text.StringUtil;
20 import com.intellij.psi.*;
21 import com.siyeh.InspectionGadgetsBundle;
22 import com.siyeh.ig.BaseInspection;
23 import com.siyeh.ig.BaseInspectionVisitor;
24 import com.siyeh.ig.InspectionGadgetsFix;
25 import org.jetbrains.annotations.Nls;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28
29 /**
30  * User: ddt
31  * Date: 5/22/13
32  */
33 public class JUnitDatapointInspection extends BaseInspection {
34   public static final String DATAPOINT_FQN = "org.junit.experimental.theories.DataPoint";
35
36
37   @Nls
38   @NotNull
39   @Override
40   public String getDisplayName() {
41     return InspectionGadgetsBundle.message("junit.datapoint.display.name");
42   }
43
44   @NotNull
45   @Override
46   protected String buildErrorString(Object... infos) {
47     return (String)infos[0];
48   }
49
50   @Nullable
51   @Override
52   protected InspectionGadgetsFix buildFix(Object... infos) {
53     return infos.length > 1 ? new MakePublicStaticFix((String)infos[1], true) : null;
54   }
55
56   @Override
57   public BaseInspectionVisitor buildVisitor() {
58     return new BaseInspectionVisitor() {
59       @Override
60       public void visitMethod(PsiMethod method) {
61         visitMember(method, "method");
62       }
63
64       @Override
65       public void visitField(PsiField field) {
66         visitMember(field, "field");
67       }
68
69       private <T extends PsiMember & PsiNameIdentifierOwner> void visitMember(T member,
70                                                                               final String memberDescription) {
71         final boolean dataPointAnnotated = AnnotationUtil.isAnnotated(member, DATAPOINT_FQN, false);
72         if (dataPointAnnotated) {
73           final String errorMessage = JUnitRuleInspection.getPublicStaticErrorMessage(member, false, true);
74           if (errorMessage != null) {
75             final PsiElement identifier = member.getNameIdentifier();
76             registerError(identifier != null ? identifier : member,
77                           InspectionGadgetsBundle.message("junit.datapoint.problem.descriptor", errorMessage, StringUtil.capitalize(memberDescription)),
78                           "Make " + memberDescription + " " + errorMessage, DATAPOINT_FQN);
79           }
80         }
81       }
82     };
83   }
84 }