Use KtFunctionLiteral as key for KtAnonymousFunctionSymbol retrieving

It seems logical to do, because KtFunctionLiteral is KtDeclaration
and KtLambdaExpression is not. Also FirAnonymousFunction use it as
realPsi reference
This commit is contained in:
Stanislav Erokhin
2021-01-19 18:34:19 +01:00
parent 75d2e415e1
commit c24ad0ba51
2 changed files with 4 additions and 9 deletions
@@ -20,18 +20,13 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
is KtTypeParameter -> getTypeParameterSymbol(psi)
is KtTypeAlias -> getTypeAliasSymbol(psi)
is KtEnumEntry -> getEnumEntrySymbol(psi)
is KtLambdaExpression -> getAnonymousFunctionSymbol(psi)
is KtFunctionLiteral -> getAnonymousFunctionSymbol(psi)
is KtProperty -> getVariableSymbol(psi)
is KtClassOrObject -> {
val literalExpression = (psi as? KtObjectDeclaration)?.parent as? KtObjectLiteralExpression
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}")
}
@@ -43,7 +38,7 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
abstract fun getTypeAliasSymbol(psi: KtTypeAlias): KtTypeAliasSymbol
abstract fun getEnumEntrySymbol(psi: KtEnumEntry): KtEnumEntrySymbol
abstract fun getAnonymousFunctionSymbol(psi: KtNamedFunction): KtAnonymousFunctionSymbol
abstract fun getAnonymousFunctionSymbol(psi: KtLambdaExpression): KtAnonymousFunctionSymbol
abstract fun getAnonymousFunctionSymbol(psi: KtFunctionLiteral): KtAnonymousFunctionSymbol
abstract fun getVariableSymbol(psi: KtProperty): KtVariableSymbol
abstract fun getAnonymousObjectSymbol(psi: KtObjectLiteralExpression): KtAnonymousObjectSymbol
abstract fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol
@@ -86,7 +81,7 @@ interface KtSymbolProviderMixIn : KtAnalysisSessionMixIn {
fun KtNamedFunction.getAnonymousFunctionSymbol(): KtAnonymousFunctionSymbol =
analysisSession.symbolProvider.getAnonymousFunctionSymbol(this)
fun KtLambdaExpression.getAnonymousFunctionSymbol(): KtAnonymousFunctionSymbol =
fun KtFunctionLiteral.getAnonymousFunctionSymbol(): KtAnonymousFunctionSymbol =
analysisSession.symbolProvider.getAnonymousFunctionSymbol(this)
fun KtProperty.getVariableSymbol(): KtVariableSymbol =
@@ -85,7 +85,7 @@ internal class KtFirSymbolProvider(
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(psi.getOrBuildFirOfType(resolveState))
}
override fun getAnonymousFunctionSymbol(psi: KtLambdaExpression): KtAnonymousFunctionSymbol = withValidityAssertion {
override fun getAnonymousFunctionSymbol(psi: KtFunctionLiteral): KtAnonymousFunctionSymbol = withValidityAssertion {
psi.withFirDeclarationOfType<FirAnonymousFunction, KtAnonymousFunctionSymbol>(resolveState) {
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(it)
}