[jvm] IDEA-307776 Fix ExtendsWith on method false positive

On JUnitMalformedDeclarationInspection.

GitOrigin-RevId: 858ac93dc62fdf53135546094404b7d8e4646cdf
This commit is contained in:
Bart van Helvert
2022-12-07 17:52:59 +01:00
committed by intellij-monorepo-bot
parent b7cfb9b9d0
commit f327cfb78b
2 changed files with 20 additions and 4 deletions

View File

@@ -190,8 +190,7 @@ private class JUnitMalformedSignatureVisitor(
validVisibility = ::notPrivate,
validParameters = { method ->
if (method.uastParameters.isEmpty()) emptyList()
else if (MetaAnnotationUtil.isMetaAnnotated(method.javaPsi, listOf(
ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCE))) null // handled in parameterized test check
else if (MetaAnnotationUtil.isMetaAnnotated(method.javaPsi, listOf(ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCE))) null // handled in parameterized test check
else if (method.hasParameterResolver()) method.uastParameters
else method.uastParameters.filter { param ->
param.type.canonicalText == ORG_JUNIT_JUPITER_API_TEST_INFO
@@ -214,10 +213,10 @@ private class JUnitMalformedSignatureVisitor(
private fun UMethod.hasParameterResolver(): Boolean {
val sourcePsi = this.sourcePsi ?: return false
val alternatives = UastFacade.convertToAlternatives(sourcePsi, arrayOf(UMethod::class.java))
return alternatives.any { it.javaPsi.containingClass?.hasParameterResolver() == true }
return alternatives.any { it.javaPsi.containingClass?.hasParameterResolver() == true || it.javaPsi.hasParameterResolver() }
}
private fun PsiClass.hasParameterResolver(): Boolean {
private fun PsiModifierListOwner.hasParameterResolver(): Boolean {
val annotation = MetaAnnotationUtil.findMetaAnnotationsInHierarchy(this, listOf(ORG_JUNIT_JUPITER_API_EXTENSION_EXTEND_WITH))
.asSequence()
.firstOrNull()

View File

@@ -1178,4 +1178,21 @@ class KotlinJUnitMalformedDeclarationInspectionTest : JUnitMalformedDeclarationI
}
""".trimIndent())
}
fun `test extends with no highlighting`() {
myFixture.testHighlighting(ULanguage.KOTLIN, """
class MockitoExtension : org.junit.jupiter.api.extension.BeforeEachCallback, org.junit.jupiter.api.extension.AfterEachCallback, org.junit.jupiter.api.extension.ParameterResolver {
override fun beforeEach(context: org.junit.jupiter.api.extension.ExtensionContext?) { }
override fun afterEach(context: org.junit.jupiter.api.extension.ExtensionContext?) { }
override fun supportsParameter(parameterContext: org.junit.jupiter.api.extension.ParameterContext?, extensionContext: org.junit.jupiter.api.extension.ExtensionContext?): Boolean { TODO() }
override fun resolveParameter(parameterContext: org.junit.jupiter.api.extension.ParameterContext?, extensionContext: org.junit.jupiter.api.extension.ExtensionContext?): Any { TODO() }
}
class MyTest {
@org.junit.jupiter.api.Test
@org.junit.jupiter.api.extension.ExtendWith(MockitoExtension::class)
fun testFoo(x: String) { }
}
""".trimIndent())
}
}