diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index be46ba6f3c7..2b56e3458d9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirConstExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirThisReference @@ -27,6 +28,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AccessorSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* @@ -137,6 +139,17 @@ fun FirClassifierSymbol<*>.toSymbol( } } +private fun AbstractFirBasedSymbol<*>.toSymbolForCall( + session: FirSession, + classifierStorage: Fir2IrClassifierStorage, + declarationStorage: Fir2IrDeclarationStorage, + preferGetter: Boolean +) = when (this) { + is FirCallableSymbol<*> -> unwrapCallRepresentative().toSymbolForCall(declarationStorage, preferGetter) + is FirClassifierSymbol<*> -> toSymbol(session, classifierStorage) + else -> error("Unknown symbol: $this") +} + fun FirReference.toSymbolForCall( session: FirSession, classifierStorage: Fir2IrClassifierStorage, @@ -145,19 +158,8 @@ fun FirReference.toSymbolForCall( preferGetter: Boolean = true ): IrSymbol? { return when (this) { - is FirResolvedNamedReference -> { - when (val resolvedSymbol = resolvedSymbol) { - is FirCallableSymbol<*> -> { - resolvedSymbol.unwrapCallRepresentative().toSymbolForCall(declarationStorage, preferGetter) - } - is FirClassifierSymbol<*> -> { - resolvedSymbol.toSymbol(session, classifierStorage) - } - else -> { - error("Unknown symbol: $resolvedSymbol") - } - } - } + is FirResolvedNamedReference -> resolvedSymbol.toSymbolForCall(session, classifierStorage, declarationStorage, preferGetter) + is FirErrorNamedReference -> candidateSymbol?.toSymbolForCall(session, classifierStorage, declarationStorage, preferGetter) is FirThisReference -> { when (val boundSymbol = boundSymbol) { is FirClassSymbol<*> -> classifierStorage.getIrClassSymbol(boundSymbol).owner.thisReceiver?.symbol