From e55f4c6e78e6c59c29a88a59e1185c9b882453c6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 15 Sep 2017 18:21:58 +0200 Subject: [PATCH] Return correct parent element for destructuring declaration initializer --- .../jetbrains/uast/kotlin/KotlinAbstractUElement.kt | 5 +++++ .../uast/kotlin/KotlinUastLanguagePlugin.kt | 2 +- .../expressions/KotlinUDeclarationsExpression.kt | 12 ++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt index 62933827ec6..b221b8b913c 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt @@ -91,6 +91,11 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? { return result.body } + if (result is KotlinUDestructuringDeclarationExpression && + element.psi == (parent as KtDestructuringDeclaration).initializer) { + return result.tempVarAssignment + } + return result } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt index a7c5d92e4ed..bd4a20daab9 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt @@ -356,7 +356,7 @@ internal object KotlinConverter { } } is KtDestructuringDeclaration -> expr { - val declarationsExpression = KotlinUDeclarationsExpression(givenParent) + val declarationsExpression = KotlinUDestructuringDeclarationExpression(givenParent, expression) declarationsExpression.apply { val tempAssignment = KotlinULocalVariable(UastKotlinPsiVariable.create(expression, declarationsExpression), declarationsExpression) val destructuringAssignments = expression.entries.mapIndexed { i, entry -> diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUDeclarationsExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUDeclarationsExpression.kt index 6696d9c68e8..eb934ef0d54 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUDeclarationsExpression.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUDeclarationsExpression.kt @@ -19,7 +19,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.uast.kotlin.KotlinAbstractUExpression import org.jetbrains.uast.kotlin.doConvertParent -class KotlinUDeclarationsExpression( +open class KotlinUDeclarationsExpression( override val psi: PsiElement?, givenParent: UElement?, val psiAnchor: PsiElement? = null @@ -32,4 +32,12 @@ class KotlinUDeclarationsExpression( override lateinit var declarations: List internal set -} \ No newline at end of file +} + +class KotlinUDestructuringDeclarationExpression( + givenParent: UElement?, + psiAnchor: PsiElement +) : KotlinUDeclarationsExpression(null, givenParent, psiAnchor) { + + val tempVarAssignment get() = declarations.first() +}