From e062b9881e84e42c167ca2cf7ed950874438668d Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 3 Nov 2016 14:20:52 +0100 Subject: [PATCH] IG: don't warn on test classes annotated with @RunWith (IDEA-163266) --- ...MethodIsPublicVoidNoArgInspectionBase.java | 6 +++++- .../JUnit4RunWith.java | 9 +++++++++ ...MethodIsPublicVoidNoArgInspectionTest.java | 19 ++++++++++++++++--- 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/junit/test_method_is_public_void_no_arg/JUnit4RunWith.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionBase.java index d56eb0ca28bb..166b12107042 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionBase.java @@ -77,7 +77,10 @@ public class TestMethodIsPublicVoidNoArgInspectionBase extends BaseInspection { if (!TestUtils.isJUnit3TestMethod(method) && !TestUtils.isJUnit4TestMethod(method)) { return; } - final PsiType returnType = method.getReturnType(); + final PsiClass containingClass = method.getContainingClass(); + if (containingClass == null || AnnotationUtil.isAnnotated(containingClass, TestUtils.RUN_WITH, true)) { + return; + } final PsiParameterList parameterList = method.getParameterList(); if (method.hasModifierProperty(PsiModifier.STATIC)) { registerMethodError(method, Problem.STATIC, method); @@ -97,6 +100,7 @@ public class TestMethodIsPublicVoidNoArgInspectionBase extends BaseInspection { return; } } + final PsiType returnType = method.getReturnType(); if (!PsiType.VOID.equals(returnType) || !method.hasModifierProperty(PsiModifier.PUBLIC)) { registerMethodError(method, Problem.NOT_PUBLIC_VOID, method); } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/test_method_is_public_void_no_arg/JUnit4RunWith.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/test_method_is_public_void_no_arg/JUnit4RunWith.java new file mode 100644 index 000000000000..b4bb7453d85f --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/test_method_is_public_void_no_arg/JUnit4RunWith.java @@ -0,0 +1,9 @@ + +@org.junit.runner.RunWith(org.junit.runner.Runner.class) +class JUnit4RunWith { + + @org.junit.Test + public int testMe(int i) { + return -1; + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionTest.java index 78dda806f969..d67f3acc2339 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/TestMethodIsPublicVoidNoArgInspectionTest.java @@ -26,6 +26,7 @@ public class TestMethodIsPublicVoidNoArgInspectionTest extends LightInspectionTe public void testJUnit3TestMethodIsPublicVoidNoArg() { doTest(); } public void testJUnit4TestMethodIsPublicVoidNoArg() { doTest(); } + public void testJUnit4RunWith() { doTest(); } @Nullable @Override @@ -40,11 +41,23 @@ public class TestMethodIsPublicVoidNoArgInspectionTest extends LightInspectionTe "public @interface Test {\n" + " java.lang.Class expected() default org.junit.Test.None.class;" + "}", + + "package org.junit.runner;" + + "@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)\n" + + "@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})\n" + + "@java.lang.annotation.Inherited\n" + + "public @interface RunWith {\n" + + " Class value();\n" + + "}", + + "package org.junit.runner;" + + "public abstract class Runner {}", + "package junit.framework;" + "public abstract class TestCase {}", - "package mockit;" + - "@Retention(value=RUNTIME) @Target(value={FIELD,PARAMETER})" + - "public @interface Mocked {}"}; + "package mockit;" + + "@Retention(value=RUNTIME) @Target(value={FIELD,PARAMETER})" + + "public @interface Mocked {}"}; } }