From ac2f4b9d82e9497410efc002e39bf8c134bbf6f8 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 25 Apr 2023 00:35:09 -0700 Subject: [PATCH] FIR/UAST: regression test for parent of param of catch clause ^KTIJ-18510 Fixed GitOrigin-RevId: 4865086a92f0677bdfb47ca571a54b9ff76d8461 --- .../kotlin/UastResolveApiFixtureTestBase.kt | 30 +++++++++++++++++-- .../uast/test/FirUastResolveApiFixtureTest.kt | 4 +++ .../FE1UastResolveApiFixtureTest.kt | 4 +++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastResolveApiFixtureTestBase.kt b/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastResolveApiFixtureTestBase.kt index 1ea29cad1ee2..eb5e279657ee 100644 --- a/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastResolveApiFixtureTestBase.kt +++ b/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastResolveApiFixtureTestBase.kt @@ -1383,7 +1383,6 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection { myFixture.checkIsMethodNameCanBeOneOf(listOf("invoke")) } - fun checkIsMethodCallCanBeOneOfRegularMethod(myFixture: JavaCodeInsightTestFixture) { @Language("kotlin") val mainCode = """ @@ -1424,7 +1423,7 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection { private fun JavaCodeInsightTestFixture.checkIsMethodNameCanBeOneOf(names: Collection) { var call: UCallExpression? = null - val uFile = file.toUElement() as KotlinUFile + val uFile = file.toUElement() as KotlinUFile uFile.accept( object : AbstractUastVisitor() { override fun visitCallExpression(node: UCallExpression): Boolean { @@ -1444,4 +1443,31 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection { TestCase.assertTrue("expected method name to be one of ${names}", ktCall.methodNameCanBeOneOf(names)) } + fun checkParentOfParameterOfCatchClause(myFixture: JavaCodeInsightTestFixture) { + myFixture.configureByText( + "main.kt", """ + try { + } catch (exception : Exception) { + println(exception) + } + """.trimIndent() + ) + + myFixture.file.toUElement()!!.accept(object : AbstractUastVisitor() { + private var catchClause: UCatchClause? = null + + override fun visitCatchClause(node: UCatchClause): Boolean { + catchClause = node + return super.visitCatchClause(node) + } + + override fun visitSimpleNameReferenceExpression(node: USimpleNameReferenceExpression): Boolean { + val resolved = node.resolve()?.toUElement() + TestCase.assertTrue(resolved?.uastParent is UCatchClause) + TestCase.assertEquals(catchClause, resolved) + return super.visitSimpleNameReferenceExpression(node) + } + }) + } + } diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastResolveApiFixtureTest.kt b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastResolveApiFixtureTest.kt index 2e7090687af9..873c7aef1786 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastResolveApiFixtureTest.kt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastResolveApiFixtureTest.kt @@ -215,4 +215,8 @@ class FirUastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua fun testIsMethodCallCanBeOneOfImportAliased() { checkIsMethodCallCanBeOneOfImportAliased(myFixture) } + + fun testParentOfParameterOfCatchClause() { + checkParentOfParameterOfCatchClause(myFixture) + } } diff --git a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastResolveApiFixtureTest.kt b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastResolveApiFixtureTest.kt index b35bd1da1dce..3848a9e158b1 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastResolveApiFixtureTest.kt +++ b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastResolveApiFixtureTest.kt @@ -170,4 +170,8 @@ class FE1UastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua fun testIsMethodCallCanBeOneOfImportAliased() { checkIsMethodCallCanBeOneOfImportAliased(myFixture) } + + fun testParentOfParameterOfCatchClause() { + checkParentOfParameterOfCatchClause(myFixture) + } }