From 6948aad85eb4e200fb61190f21c2cf54174ed3ca Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 23 Dec 2024 13:51:35 -0800 Subject: [PATCH] KT UAST: look up closest scopes (lambdas) first ...when building implicit receiver Otherwise, we will pick the containing class (for instance functions) first even though the call is inside a lambda. ^KTIJ-32595 GitOrigin-RevId: d3cfec15e48a2162e8ab8decd1915f25009eca8e --- .../expressions/KotlinUFunctionCallExpression.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUFunctionCallExpression.kt b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUFunctionCallExpression.kt index 3044c1d6f42a..969628a0a801 100644 --- a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUFunctionCallExpression.kt +++ b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUFunctionCallExpression.kt @@ -307,11 +307,7 @@ class KotlinUFunctionCallExpression( callableDeclaration.containingClass } ?: return null - val containingUClass = getContainingUClass() - if (implicitReceiver is PsiClass && implicitReceiver == containingUClass?.javaPsi) { - // Implicit `this` - return KotlinUImplicitThis(implicitReceiver, receiverType, this) - } + // Lambda receiver var enclosingLambda = this.getParentOfType() while (enclosingLambda != null) { @@ -334,6 +330,12 @@ class KotlinUFunctionCallExpression( enclosingLambda = enclosingLambda.getParentOfType() } + val containingUClass = getContainingUClass() + if (implicitReceiver is PsiClass && implicitReceiver == containingUClass?.javaPsi) { + // Implicit `this` + return KotlinUImplicitThis(implicitReceiver, receiverType, this) + } + return null }