From 374042a96991c807e952bafe56899677df636292 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 22 Dec 2017 19:23:54 +0100 Subject: [PATCH] reject static methods as tests for standard annotations (IDEA-182687) --- .../impl/src/com/intellij/execution/junit/JUnitUtil.java | 9 +++++++-- .../test/com/intellij/junit5/JUnit5AcceptanceTest.java | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) 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 13d8e7e0f0a6..9b65c38e8249 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -125,7 +125,8 @@ public class JUnitUtil { final PsiMethod psiMethod = location.getPsiElement(); final PsiClass aClass = location instanceof MethodLocation ? ((MethodLocation)location).getContainingClass() : psiMethod.getContainingClass(); if (checkClass && (aClass == null || !isTestClass(aClass, checkAbstract, true))) return false; - if (isTestAnnotated(psiMethod)) return true; + if (isTestAnnotated(psiMethod, false)) return !psiMethod.hasModifierProperty(PsiModifier.STATIC); + if (MetaAnnotationUtil.isMetaAnnotated(psiMethod, Collections.singletonList(CUSTOM_TESTABLE_ANNOTATION))) return true; if (psiMethod.isConstructor()) return false; if (!psiMethod.hasModifierProperty(PsiModifier.PUBLIC)) return false; if (psiMethod.hasModifierProperty(PsiModifier.ABSTRACT)) return false; @@ -295,11 +296,15 @@ public class JUnitUtil { } public static boolean isTestAnnotated(final PsiMethod method) { + return isTestAnnotated(method, true); + } + + public static boolean isTestAnnotated(final PsiMethod method, boolean includeCustom) { if (AnnotationUtil.isAnnotated(method, TEST_ANNOTATION, 0) || JUnitRecognizer.willBeAnnotatedAfterCompilation(method)) { return true; } - return MetaAnnotationUtil.isMetaAnnotated(method, TEST5_ANNOTATIONS); + return MetaAnnotationUtil.isMetaAnnotated(method, includeCustom ? TEST5_ANNOTATIONS : TEST5_JUPITER_ANNOTATIONS); } diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java index 593b9671e8c6..9b2672aecd23 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java @@ -64,6 +64,15 @@ class JUnit5AcceptanceTest extends JUnit5CodeInsightTest { }); } + @Test + void rejectStaticMethods() { + doTest(() -> { + PsiClass aClass = myFixture.addClass("import org.junit.jupiter.api.*; /** @noinspection ALL*/ class MyTest { @Test static void method() {}}"); + assertTrue(JUnitUtil.isTestClass(aClass, false, false)); + assertFalse(JUnitUtil.isTestMethod(MethodLocation.elementInClass(aClass.getMethods()[0], aClass))); + }); + } + @Test void testFrameworkDetection() { doTest(() -> {