FIR IDE: Make getContainingPsi work with ItLambdaParameter source
It prevented the code completion to work in positions like
`"hello".let { <caret> }`
This commit is contained in:
+5
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtRealSourceElementKind
|
import org.jetbrains.kotlin.KtRealSourceElementKind
|
||||||
|
import org.jetbrains.kotlin.analysis.api.assertIsValidAndAccessible
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtSymbolContainingDeclarationProvider
|
import org.jetbrains.kotlin.analysis.api.components.KtSymbolContainingDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirReceiverParameterSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirReceiverParameterSymbol
|
||||||
@@ -22,6 +23,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.psi
|
import org.jetbrains.kotlin.psi
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
|
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtFunctionLiteral
|
||||||
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
|
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
|
|
||||||
@@ -30,6 +32,8 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
|||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtSymbolContainingDeclarationProvider(), KtFirAnalysisSessionComponent {
|
) : KtSymbolContainingDeclarationProvider(), KtFirAnalysisSessionComponent {
|
||||||
override fun getContainingDeclaration(symbol: KtSymbol): KtSymbolWithKind? {
|
override fun getContainingDeclaration(symbol: KtSymbol): KtSymbolWithKind? {
|
||||||
|
assertIsValidAndAccessible()
|
||||||
|
|
||||||
if (symbol is KtReceiverParameterSymbol) {
|
if (symbol is KtReceiverParameterSymbol) {
|
||||||
return (symbol as KtFirReceiverParameterSymbol).firRef.withFir {
|
return (symbol as KtFirReceiverParameterSymbol).firRef.withFir {
|
||||||
firSymbolBuilder.buildSymbol(it) as KtSymbolWithKind
|
firSymbolBuilder.buildSymbol(it) as KtSymbolWithKind
|
||||||
@@ -93,6 +97,7 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
|||||||
return source.psi as KtDeclaration
|
return source.psi as KtDeclaration
|
||||||
KtFakeSourceElementKind.PropertyFromParameter -> return source.psi?.parentOfType<KtPrimaryConstructor>()!!
|
KtFakeSourceElementKind.PropertyFromParameter -> return source.psi?.parentOfType<KtPrimaryConstructor>()!!
|
||||||
KtFakeSourceElementKind.DefaultAccessor -> return source.psi as KtProperty
|
KtFakeSourceElementKind.DefaultAccessor -> return source.psi as KtProperty
|
||||||
|
KtFakeSourceElementKind.ItLambdaParameter -> return source.psi as KtFunctionLiteral
|
||||||
KtRealSourceElementKind -> source.psi!!
|
KtRealSourceElementKind -> source.psi!!
|
||||||
else -> error("Unexpected FirSourceElement: kind=${source.kind} element=${source.psi!!::class.simpleName}")
|
else -> error("Unexpected FirSourceElement: kind=${source.kind} element=${source.psi!!::class.simpleName}")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user