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:
+3
-8
@@ -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 =
|
||||
|
||||
+1
-1
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user