diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/junit/JUnit5MalformedParameterizedInspection.kt b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/junit/JUnit5MalformedParameterizedInspection.kt index 74d48ed95585..b3454ecca8bc 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/junit/JUnit5MalformedParameterizedInspection.kt +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/junit/JUnit5MalformedParameterizedInspection.kt @@ -17,6 +17,7 @@ import com.intellij.openapi.util.NlsSafe import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.* import com.intellij.psi.codeStyle.JavaCodeStyleManager +import com.intellij.psi.impl.source.PsiClassReferenceType import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference import com.intellij.psi.impl.source.tree.java.PsiNameValuePairImpl import com.intellij.psi.search.searches.ClassInheritorsSearch @@ -233,7 +234,10 @@ private class NullOrEmptySourceChecker(val holder: ProblemsHolder) { val size = method.uastParameters.size val shortName = psiAnnotation.qualifiedName ?: return if (size == 1) { - val type = method.uastParameters[0].type + var type = method.uastParameters[0].type + if (type is PsiClassReferenceType) { + type = type.rawType() + } if (type is PsiArrayType || type.equalsToText(CommonClassNames.JAVA_LANG_STRING) || type.equalsToText(CommonClassNames.JAVA_UTIL_LIST) || diff --git a/jvm/jvm-analysis-java-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollection.java b/jvm/jvm-analysis-java-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollection.java new file mode 100644 index 000000000000..12705df8c54e --- /dev/null +++ b/jvm/jvm-analysis-java-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollection.java @@ -0,0 +1,20 @@ +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.jupiter.params.provider.EmptySource; +import org.junit.jupiter.params.ParameterizedTest; + +class MalformedParameterizedCollection { + @ParameterizedTest + @EmptySource + void testFooSet(Set input) {} + + @ParameterizedTest + @EmptySource + void testFooList(List input) {} + + @ParameterizedTest + @EmptySource + void testFooMap(Map input) {} +} diff --git a/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/junit/JavaJUnit5MalformedParameterizedTest.java b/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/junit/JavaJUnit5MalformedParameterizedTest.java index 29d99252a882..d555cdb15a33 100644 --- a/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/junit/JavaJUnit5MalformedParameterizedTest.java +++ b/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/junit/JavaJUnit5MalformedParameterizedTest.java @@ -30,6 +30,7 @@ public class JavaJUnit5MalformedParameterizedTest extends LightJavaInspectionTes public void testMalformedSourcesImplicitConversion() { doTest(); } public void testMalformedSourcesImplicitParameters() { doTest(); } public void testMalformedSourcesTestInstancePerClass() { doTest(); } + public void testMalformedParameterizedCollection() { doTest(); } @Override protected String getBasePath() { @@ -41,4 +42,4 @@ public class JavaJUnit5MalformedParameterizedTest extends LightJavaInspectionTes protected LightProjectDescriptor getProjectDescriptor() { return JAVA_8; } -} \ No newline at end of file +} diff --git a/jvm/jvm-analysis-kotlin-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollectionKt.kt b/jvm/jvm-analysis-kotlin-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollectionKt.kt new file mode 100644 index 000000000000..4f6e7109d032 --- /dev/null +++ b/jvm/jvm-analysis-kotlin-tests/testData/codeInspection/junit5MalformedParameterized/MalformedParameterizedCollectionKt.kt @@ -0,0 +1,16 @@ +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EmptySource + +object MalformedParameterizedCollectionKt { + @ParameterizedTest + @EmptySource + fun testFooSet(input: Set?) {} + + @ParameterizedTest + @EmptySource + fun testFooList(input: List?) {} + + @ParameterizedTest + @EmptySource + fun testFooMap(input: Map?) {} +} diff --git a/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/test/junit/KotlinJUnit5MalformedParameterizedTest.kt b/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/test/junit/KotlinJUnit5MalformedParameterizedTest.kt index 731272e1b604..2824ced087b3 100644 --- a/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/test/junit/KotlinJUnit5MalformedParameterizedTest.kt +++ b/jvm/jvm-analysis-kotlin-tests/testSrc/com/intellij/codeInspection/tests/kotlin/test/junit/KotlinJUnit5MalformedParameterizedTest.kt @@ -54,6 +54,10 @@ class KotlinJUnit5MalformedParameterizedTest : JavaCodeInsightFixtureTestCase() myFixture.testHighlighting("CantResolveTarget.kt") } + fun `test MalformedParameterizedCollectionKt`() { + myFixture.testHighlighting("MalformedParameterizedCollectionKt.kt") + } + fun `test CantResolveTarget highlighting`() { myFixture.testHighlighting("CantResolveTarget.kt") } @@ -93,4 +97,4 @@ class KotlinJUnit5MalformedParameterizedTest : JavaCodeInsightFixtureTestCase() fun `test EnumResolve quickFixes`() { myFixture.testHighlighting("EnumResolve.kt") } -} \ No newline at end of file +} diff --git a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5TestFrameworkSetupUtil.java b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5TestFrameworkSetupUtil.java index 70466be4e3f4..20d7738f9e8b 100644 --- a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5TestFrameworkSetupUtil.java +++ b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5TestFrameworkSetupUtil.java @@ -7,6 +7,8 @@ public class JUnit5TestFrameworkSetupUtil { public static JavaCodeInsightTestFixture setupJUnit5Library(JavaCodeInsightTestFixture fixture) { fixture.addClass( "package org.junit.jupiter.params.provider;\n" + "public @interface MethodSource {String[] value() default \"\";}"); + fixture.addClass( "package org.junit.jupiter.params.provider;\n" + + "public @interface EmptySource {}"); fixture.addClass( "package org.junit.jupiter.params;\n" + "@org.junit.platform.commons.annotation.Testable\n" + "public @interface ParameterizedTest {String name() default \"\";}"); @@ -83,4 +85,4 @@ public class JUnit5TestFrameworkSetupUtil { fixture.addClass("package org.junit.jupiter.api; public @interface Nested{}"); return fixture; } -} \ No newline at end of file +}