diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java
index 990fea7bd281..d63f2bc7bd4f 100644
--- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java
+++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java
@@ -120,6 +120,7 @@ public class JUnitUtil {
if (psiMethod.getParameterList().getParametersCount() > 0) return false;
if (psiMethod.hasModifierProperty(PsiModifier.STATIC) && SUITE_METHOD_NAME.equals(psiMethod.getName())) return false;
if (!psiMethod.getName().startsWith("test")) return false;
+ if (psiMethod.hasModifierProperty(PsiModifier.STATIC)) return false;
PsiClass testCaseClass = getTestCaseClassOrNull(location);
return testCaseClass != null && psiMethod.getContainingClass().isInheritor(testCaseClass, true) && PsiType.VOID.equals(psiMethod.getReturnType());
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
index ff0227571fed..6522283735f2 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -2059,8 +2059,8 @@ class.with.only.private.constructors.problem.descriptor=Class #ref
property.value.set.to.itself.display.name=Property value set to itself
equals.with.itself.display.name='equals()' called on itself
equals.with.itself.problem.descriptor=#ref() called on itself
-junit4.method.naming.convention.display.name=JUnit 4 test method naming convention
-junit4.method.naming.convention.element.description=JUnit 4 test method
+junit4.method.naming.convention.display.name=JUnit 4+ test method naming convention
+junit4.method.naming.convention.element.description=JUnit 4+ test method
junit3.method.naming.convention.display.name=JUnit 3 test method naming convention
junit3.method.naming.convention.element.description=JUnit 3 test method
introduce.holder.class.quickfix=Introduce holder class
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnit4MethodNamingConventionInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnit4MethodNamingConventionInspectionBase.java
index 07d5ecfb455d..459d63cbcf01 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnit4MethodNamingConventionInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnit4MethodNamingConventionInspectionBase.java
@@ -15,8 +15,11 @@
*/
package com.siyeh.ig.junit;
+import com.intellij.codeInsight.TestFrameworks;
+import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiMethod;
+import com.intellij.testIntegration.TestFramework;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.naming.ConventionInspection;
@@ -68,7 +71,7 @@ public class JUnit4MethodNamingConventionInspectionBase extends ConventionInspec
@Override
public void visitMethod(PsiMethod method) {
super.visitMethod(method);
- if (!TestUtils.isJUnit4TestMethod(method) || !TestUtils.isRunnable(method)) {
+ if (!TestUtils.isAnnotatedTestMethod(method)) {
return;
}
final PsiIdentifier nameIdentifier = method.getNameIdentifier();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspectionBase.java
index d44126fd027c..d64e43fd7a60 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspectionBase.java
@@ -15,8 +15,10 @@
*/
package com.siyeh.ig.junit;
+import com.intellij.codeInsight.TestFrameworks;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
+import com.intellij.testIntegration.TestFramework;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.naming.ConventionInspection;
@@ -82,12 +84,12 @@ public class JUnitTestClassNamingConventionInspectionBase extends ConventionInsp
if (aClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
return;
}
- if (!InheritanceUtil.isInheritor(aClass,
- JUnitCommonClassNames.JUNIT_FRAMEWORK_TEST_CASE)) {
- if (!hasJUnit4TestMethods(aClass)) {
- return;
- }
+
+ final TestFramework framework = TestFrameworks.detectFramework(aClass);
+ if (framework == null || !framework.getName().startsWith("JUnit") || !framework.isTestClass(aClass)) {
+ return;
}
+
final String name = aClass.getName();
if (name == null) {
return;
@@ -107,19 +109,5 @@ public class JUnitTestClassNamingConventionInspectionBase extends ConventionInsp
registerClassError(aClass, name);
}
}
-
- private boolean hasJUnit4TestMethods(@NotNull PsiClass aClass) {
- //use this if this method turns out to have bad performance:
- //if (!TestUtils.isTest(aClass)) {
- // return false;
- //}
- final PsiMethod[] methods = aClass.getMethods();
- for (PsiMethod method : methods) {
- if (TestUtils.isJUnit4TestMethod(method)) {
- return true;
- }
- }
- return false;
- }
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodInProductCodeInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodInProductCodeInspection.java
index ace8cd165d8f..f885a677f53f 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodInProductCodeInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodInProductCodeInspection.java
@@ -57,7 +57,7 @@ public class TestMethodInProductCodeInspection extends BaseInspection {
public void visitMethod(PsiMethod method) {
final PsiClass containingClass = method.getContainingClass();
if (TestUtils.isInTestSourceContent(containingClass) ||
- !TestUtils.isJUnit4TestMethod(method)) {
+ !TestUtils.isAnnotatedTestMethod(method)) {
return;
}
registerMethodError(method);
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/InstanceMethodNamingConventionInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/InstanceMethodNamingConventionInspectionBase.java
index 85fe6d20e8ca..82cd4f109dd8 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/InstanceMethodNamingConventionInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/InstanceMethodNamingConventionInspectionBase.java
@@ -93,7 +93,7 @@ public class InstanceMethodNamingConventionInspectionBase extends ConventionInsp
return;
}
if (TestUtils.isRunnable(method)) {
- if (TestUtils.isJUnit4TestMethod(method) && isInspectionEnabled("JUnit4MethodNamingConvention", method)) {
+ if (TestUtils.isAnnotatedTestMethod(method) && isInspectionEnabled("JUnit4MethodNamingConvention", method)) {
return;
}
if (TestUtils.isJUnit3TestMethod(method) && isInspectionEnabled("JUnit3MethodNamingConvention", method)) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java
index eadaa038c86e..68c85078e271 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java
@@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.testIntegration.TestFramework;
import com.siyeh.ig.junit.JUnitCommonClassNames;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -62,7 +63,11 @@ public class TestUtils {
}
public static boolean isJUnitTestMethod(@Nullable PsiMethod method) {
- return isRunnable(method) && (isJUnit3TestMethod(method) || isJUnit4TestMethod(method));
+ if (method == null) return false;
+ final PsiClass containingClass = method.getContainingClass();
+ if (containingClass == null) return false;
+ final TestFramework framework = TestFrameworks.detectFramework(containingClass);
+ return framework != null && framework.getName().startsWith("JUnit") && framework.isTestMethod(method);
}
public static boolean isRunnable(PsiMethod method) {
@@ -99,6 +104,21 @@ public class TestUtils {
return method != null && AnnotationUtil.isAnnotated(method, "org.junit.Test", true);
}
+ public static boolean isAnnotatedTestMethod(@Nullable PsiMethod method) {
+ if (method == null) return false;
+ final PsiClass containingClass = method.getContainingClass();
+ if (containingClass == null) return false;
+ final TestFramework testFramework = TestFrameworks.detectFramework(containingClass);
+ if (testFramework == null) return false;
+ if (testFramework.isTestMethod(method)) {
+ final String testFrameworkName = testFramework.getName();
+ return testFrameworkName.equals("JUnit4") || testFrameworkName.equals("JUnit5");
+ }
+ return false;
+ }
+
+
+
public static boolean isJUnitTestClass(@Nullable PsiClass targetClass) {
return targetClass != null && InheritanceUtil.isInheritor(targetClass, JUnitCommonClassNames.JUNIT_FRAMEWORK_TEST_CASE);
}
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java
index 59d5d2a62d9b..b6922df84944 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java
@@ -18,8 +18,7 @@ package com.siyeh.ig.junit;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.RenameFix;
-public class JUnitTestClassNamingConventionInspection
- extends JUnitTestClassNamingConventionInspectionBase {
+public class JUnitTestClassNamingConventionInspection extends JUnitTestClassNamingConventionInspectionBase {
@Override
protected InspectionGadgetsFix buildFix(Object... infos) {
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/JUnit4MethodNamingConvention.html b/plugins/InspectionGadgets/src/inspectionDescriptions/JUnit4MethodNamingConvention.html
index b2f7c7986a58..213d1d6a20f7 100644
--- a/plugins/InspectionGadgets/src/inspectionDescriptions/JUnit4MethodNamingConvention.html
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/JUnit4MethodNamingConvention.html
@@ -1,11 +1,11 @@
-Use the fields below to specify minimum length, maximum length and regular expression expected for JUnit 4 test method names. +Use the fields below to specify minimum length, maximum length and regular expression expected for JUnit 4+ test method names. Specify 0 to not check the length of names. Regular expressions are in standard java.util.regex format.
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/TestMethodInProductCode.html b/plugins/InspectionGadgets/src/inspectionDescriptions/TestMethodInProductCode.html index deb66cd95ef4..767453325178 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/TestMethodInProductCode.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/TestMethodInProductCode.html @@ -1,6 +1,6 @@
-Reports JUnit 4.0 @Test methods in product source trees. +Reports JUnit 4+ @Test methods in product source trees. This most likely indicates programmer error, and can result in test code being shipped into production. diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/junit4_method_naming_convention/JUnit4MethodNamingConvention.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/junit4_method_naming_convention/JUnit4MethodNamingConvention.java index 69379a9abb87..4f23a659ba16 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/junit4_method_naming_convention/JUnit4MethodNamingConvention.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/junit4_method_naming_convention/JUnit4MethodNamingConvention.java @@ -3,13 +3,13 @@ import org.junit.Test; public class JUnit4MethodNamingConvention { @Test - public void