1 ? new MakePublicStaticFix((String)infos[1], true) : null;
+ }
+
+ @Override
+ public BaseInspectionVisitor buildVisitor() {
+ return new BaseInspectionVisitor() {
+ @Override
+ public void visitField(PsiField field) {
+ final boolean dataPointAnnotated = AnnotationUtil.isAnnotated(field, DATAPOINT_FQN, false);
+ if (dataPointAnnotated) {
+ final String errorMessage = JUnitRuleInspection.getPublicStaticErrorMessage(field, false, true);
+ if (errorMessage != null) {
+ registerError(field.getNameIdentifier(),
+ InspectionGadgetsBundle.message("junit.datapoint.problem.descriptor", errorMessage),
+ "Make field " + errorMessage, DATAPOINT_FQN);
+ }
+ }
+ }
+ };
+ }
+}
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitRuleInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitRuleInspection.java
index 19e689b4bd42..f29d519fc2bc 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitRuleInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitRuleInspection.java
@@ -16,15 +16,11 @@
package com.siyeh.ig.junit;
import com.intellij.codeInsight.AnnotationUtil;
-import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiUtil;
-import com.intellij.util.IncorrectOperationException;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -70,7 +66,7 @@ public class JUnitRuleInspection extends BaseInspection {
@Nullable
@Override
protected InspectionGadgetsFix buildFix(Object... infos) {
- return infos.length > 1 ? new MakePublicStaticFix((String)infos[1], (String)infos[2]) : null;
+ return infos.length > 1 ? new MakePublicStaticFix((String)infos[1], infos[2].equals(CLASS_RULE_FQN)) : null;
}
@Override
@@ -82,35 +78,7 @@ public class JUnitRuleInspection extends BaseInspection {
final boolean classRuleAnnotated = REPORT_CLASS_RULE_PROBLEMS && AnnotationUtil.isAnnotated(field, CLASS_RULE_FQN, false);
if (ruleAnnotated || classRuleAnnotated) {
String annotation = ruleAnnotated ? RULE_FQN : CLASS_RULE_FQN;
- String errorMessage = null;
- final boolean hasStatic = field.hasModifierProperty(PsiModifier.STATIC);
- final boolean hasPublic = field.hasModifierProperty(PsiModifier.PUBLIC);
- if (!hasPublic) {
- if (classRuleAnnotated) {
- if (!hasStatic) {
- errorMessage = "public and static";
- } else {
- errorMessage = "public";
- }
- }
- else {
- if (!hasStatic){
- errorMessage = "public";
- } else {
- errorMessage = "public and non-static";
- }
- }
- }
- else {
- if (!hasStatic) {
- if (classRuleAnnotated) {
- errorMessage = "static";
- }
- }
- else if (ruleAnnotated) {
- errorMessage = "non-static";
- }
- }
+ String errorMessage = getPublicStaticErrorMessage(field, ruleAnnotated, classRuleAnnotated);
if (errorMessage != null) {
registerError(field.getNameIdentifier(), InspectionGadgetsBundle.message("junit.rule.problem.descriptor", annotation, errorMessage), "Make field " + errorMessage, annotation);
}
@@ -122,31 +90,36 @@ public class JUnitRuleInspection extends BaseInspection {
};
}
- private static class MakePublicStaticFix extends InspectionGadgetsFix {
- private final String myName;
- private final boolean myMakeStatic;
-
- public MakePublicStaticFix(String name, String annotation) {
- myName = name;
- myMakeStatic = annotation.equals(CLASS_RULE_FQN);
- }
-
- @Override
- protected void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException {
- final PsiElement element = descriptor.getPsiElement();
- if (element != null) {
- final PsiElement parent = element.getParent();
- if (parent instanceof PsiField) {
- PsiUtil.setModifierProperty((PsiField)parent, PsiModifier.PUBLIC, true);
- PsiUtil.setModifierProperty((PsiField)parent, PsiModifier.STATIC, myMakeStatic);
+ static String getPublicStaticErrorMessage(PsiField field, boolean shouldBeNonStatic, boolean shouldBeStatic) {
+ String errorMessage = null;
+ final boolean hasStatic = field.hasModifierProperty(PsiModifier.STATIC);
+ final boolean hasPublic = field.hasModifierProperty(PsiModifier.PUBLIC);
+ if (!hasPublic) {
+ if (shouldBeStatic) {
+ if (!hasStatic) {
+ errorMessage = "public and static";
+ } else {
+ errorMessage = "public";
+ }
+ }
+ else {
+ if (!hasStatic){
+ errorMessage = "public";
+ } else {
+ errorMessage = "public and non-static";
}
}
}
-
- @NotNull
- @Override
- public String getName() {
- return myName;
+ else {
+ if (!hasStatic) {
+ if (shouldBeStatic) {
+ errorMessage = "static";
+ }
+ }
+ else if (shouldBeNonStatic) {
+ errorMessage = "non-static";
+ }
}
+ return errorMessage;
}
}
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/MakePublicStaticFix.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/MakePublicStaticFix.java
new file mode 100644
index 000000000000..30b1f1d1f590
--- /dev/null
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/MakePublicStaticFix.java
@@ -0,0 +1,43 @@
+package com.siyeh.ig.junit;
+
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiField;
+import com.intellij.psi.PsiModifier;
+import com.intellij.psi.util.PsiUtil;
+import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.InspectionGadgetsFix;
+import org.jetbrains.annotations.NotNull;
+
+/**
+* User: anna
+* Date: 5/22/13
+*/
+class MakePublicStaticFix extends InspectionGadgetsFix {
+ private final String myName;
+ private final boolean myMakeStatic;
+
+ public MakePublicStaticFix(final String name, final boolean makeStatic) {
+ myName = name;
+ myMakeStatic = makeStatic;
+ }
+
+ @Override
+ protected void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException {
+ final PsiElement element = descriptor.getPsiElement();
+ if (element != null) {
+ final PsiElement parent = element.getParent();
+ if (parent instanceof PsiField) {
+ PsiUtil.setModifierProperty((PsiField)parent, PsiModifier.PUBLIC, true);
+ PsiUtil.setModifierProperty((PsiField)parent, PsiModifier.STATIC, myMakeStatic);
+ }
+ }
+ }
+
+ @NotNull
+ @Override
+ public String getName() {
+ return myName;
+ }
+}
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/JUnitDatapoint.html b/plugins/InspectionGadgets/src/inspectionDescriptions/JUnitDatapoint.html
new file mode 100644
index 000000000000..2ab2b6bd19b7
--- /dev/null
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/JUnitDatapoint.html
@@ -0,0 +1,8 @@
+
+
+Checks for any member that is annotated with @DataPoint but is not public or not static.
+
+
+New in 13, Powered by InspectionGadgets
+
+
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/rule/wrongdatapoint.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/rule/wrongdatapoint.java
new file mode 100644
index 000000000000..5a8a898c1671
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/rule/wrongdatapoint.java
@@ -0,0 +1,6 @@
+class Test {
+ @org.junit.experimental.theories.DataPoint public static Object f1;
+ @org.junit.experimental.theories.DataPoint public Object f2;
+ @org.junit.experimental.theories.DataPoint static Object f3;
+ @org.junit.experimental.theories.DataPoint Object f4;
+}
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitDatapointInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitDatapointInspectionTest.java
new file mode 100644
index 000000000000..fd9f588b302c
--- /dev/null
+++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitDatapointInspectionTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * User: ddt
+ * Date: 22-Mai-2013
+ */
+package com.siyeh.ig.junit;
+
+import com.intellij.openapi.application.PluginPathManager;
+import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
+import org.jetbrains.annotations.NotNull;
+
+public class JUnitDatapointInspectionTest extends LightCodeInsightFixtureTestCase {
+ public void testWrongdatapoint() throws Exception {
+ myFixture.addClass("package org.junit.experimental.theories;\n" +
+ "public @interface DataPoint {}");
+ myFixture.testHighlighting(true, false, false, getTestName(true) + ".java");
+ }
+
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ myFixture.enableInspections(new JUnitDatapointInspection());
+ }
+
+ @NotNull
+ @Override
+ protected String getTestDataPath() {
+ return PluginPathManager.getPluginHomePath("InspectionGadgets") + "/test/com/siyeh/igtest/junit/rule/";
+ }
+}