diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 6e762725b2f..6aef3a1a327 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -133,7 +133,7 @@ class FirCallResolver( private inline fun Q.transformExplicitReceiver(): Q { val explicitReceiver = explicitReceiver as? FirQualifiedAccessExpression - ?: return transformExplicitReceiver(transformer, ResolutionMode.ContextIndependent) as Q + ?: return transformExplicitReceiver(transformer, ResolutionMode.ReceiverResolution) as Q (explicitReceiver.calleeReference as? FirSuperReference)?.let { transformer.transformSuperReceiver(it, explicitReceiver, this) @@ -143,14 +143,14 @@ class FirCallResolver( if (explicitReceiver is FirPropertyAccessExpression) { this.replaceExplicitReceiver( transformer.transformQualifiedAccessExpression( - explicitReceiver, ResolutionMode.ContextIndependent, + explicitReceiver, ResolutionMode.ReceiverResolution, isUsedAsReceiver = true ) as FirExpression ) return this } - return transformExplicitReceiver(transformer, ResolutionMode.ContextIndependent) as Q + return transformExplicitReceiver(transformer, ResolutionMode.ReceiverResolution) as Q } private data class ResolutionResult( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt index 8586af6266d..ee879a212ec 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt @@ -15,6 +15,7 @@ sealed class ResolutionMode { object ContextDependent : ResolutionMode() object ContextDependentDelegate : ResolutionMode() object ContextIndependent : ResolutionMode() + object ReceiverResolution : ResolutionMode() // TODO: it's better not to use WithExpectedType(FirImplicitTypeRef) class WithExpectedType( @@ -57,7 +58,8 @@ sealed class ResolutionMode { fun ResolutionMode.expectedType(components: BodyResolveComponents, allowFromCast: Boolean = false): FirTypeRef? = when (this) { is ResolutionMode.WithExpectedType -> expectedTypeRef - is ResolutionMode.ContextIndependent -> components.noExpectedType + is ResolutionMode.ContextIndependent, + is ResolutionMode.ReceiverResolution -> components.noExpectedType is ResolutionMode.WithExpectedTypeFromCast -> expectedTypeRef.takeIf { allowFromCast } is ResolutionMode.WithSuggestedType -> suggestedTypeRef else -> null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index b9a12f10911..d0a2610d8cd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -764,6 +764,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } is ResolutionMode.WithExpectedType, is ResolutionMode.ContextIndependent, + is ResolutionMode.ReceiverResolution, is ResolutionMode.WithSuggestedType -> { val expectedTypeRef = when (data) { is ResolutionMode.WithExpectedType -> {