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 ca59256b587..266ba2c4886 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt @@ -17,6 +17,7 @@ package org.jetbrains.uast.kotlin import com.intellij.lang.Language +import com.intellij.openapi.util.Key import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.impl.source.tree.LeafPsiElement @@ -45,6 +46,8 @@ interface KotlinUastBindingContextProviderService { fun getTypeMapper(element: KtElement): KotlinTypeMapper? } +var PsiElement.destructuringDeclarationInitializer: Boolean? by UserDataProperty(Key.create("kotlin.uast.destructuringDeclarationInitializer")) + class KotlinUastLanguagePlugin : UastLanguagePlugin { override val priority = 10 @@ -367,6 +370,7 @@ internal object KotlinConverter { val psiFactory = KtPsiFactory(expression.project) val initializer = psiFactory.createAnalyzableExpression("${tempAssignment.name}.component${i + 1}()", expression.containingFile) + initializer.destructuringDeclarationInitializer = true KotlinULocalVariable(UastKotlinPsiVariable.create(entry, tempAssignment.psi, declarationsExpression, initializer), declarationsExpression) } declarations = listOf(tempAssignment) + destructuringAssignments diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSimpleReferenceExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSimpleReferenceExpression.kt index 03be3102bd0..fc856f28bab 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSimpleReferenceExpression.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSimpleReferenceExpression.kt @@ -49,6 +49,14 @@ open class KotlinUSimpleReferenceExpression( override fun accept(visitor: UastVisitor) { visitor.visitSimpleNameReferenceExpression(this) + if (psi.parent.destructuringDeclarationInitializer != true) { + visitAccessorCalls(visitor) + } + + visitor.afterVisitSimpleNameReferenceExpression(this) + } + + private fun visitAccessorCalls(visitor: UastVisitor) { // Visit Kotlin get-set synthetic Java property calls as function calls val bindingContext = psi.analyze() val access = psi.readWriteAccess() @@ -78,8 +86,6 @@ open class KotlinUSimpleReferenceExpression( } } } - - visitor.afterVisitSimpleNameReferenceExpression(this) } private tailrec fun findAssignment(prev: PsiElement?, element: PsiElement?): KtBinaryExpression? = when (element) {