From ff9edb87763eb4f6cd279a7a34a4a7048b9a9193 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 29 Mar 2021 19:28:00 +0200 Subject: [PATCH] [FIR IDE] Fixed getting symbols for lambda literal --- .../kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt | 5 +++++ .../idea/fir/low/level/api/FirModuleResolveStateImpl.kt | 1 + 2 files changed, 6 insertions(+) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt index 7d78a83af98..a463c1a1c8f 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt @@ -27,6 +27,11 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() { literalExpression?.let(::getAnonymousObjectSymbol) ?: getClassOrObjectSymbol(psi) } is KtPropertyAccessor -> getPropertyAccessorSymbol(psi) + is KtFunctionLiteral -> { + val literalExpression = psi.parent as? KtLambdaExpression + check(literalExpression != null) { "Unexpected parent for KtFunctionLiteral" } + getAnonymousFunctionSymbol(literalExpression) + } else -> error("Cannot build symbol for ${psi::class}") } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt index 5e2e9b90345..ba8aa3af883 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt @@ -127,6 +127,7 @@ internal class FirModuleResolveStateImpl( val firDeclaration = FirElementFinder.findElementIn(container) { firDeclaration -> when (val realPsi = firDeclaration.realPsi) { is KtObjectLiteralExpression -> realPsi.objectDeclaration == ktDeclaration + is KtFunctionLiteral -> realPsi.parent == ktDeclaration else -> realPsi == ktDeclaration } }