Return correct parent element for destructuring declaration initializer

This commit is contained in:
Dmitry Jemerov
2017-09-15 18:21:58 +02:00
parent a44dff6803
commit e55f4c6e78
3 changed files with 16 additions and 3 deletions
@@ -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
}
@@ -356,7 +356,7 @@ internal object KotlinConverter {
}
}
is KtDestructuringDeclaration -> expr<UDeclarationsExpression> {
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 ->
@@ -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<UDeclaration>
internal set
}
}
class KotlinUDestructuringDeclarationExpression(
givenParent: UElement?,
psiAnchor: PsiElement
) : KotlinUDeclarationsExpression(null, givenParent, psiAnchor) {
val tempVarAssignment get() = declarations.first()
}