diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index 4b1460d1ece..101ff9e7575 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -554,7 +554,7 @@ internal object CheckArguments : CheckerStage() { private val Candidate.isInvokeFromExtensionFunctionType: Boolean get() = explicitReceiverKind == DISPATCH_RECEIVER - && dispatchReceiver?.resolvedType?.isExtensionFunctionType == true + && dispatchReceiver?.resolvedType?.fullyExpandedType(this.callInfo.session)?.isExtensionFunctionType == true && (symbol as? FirNamedFunctionSymbol)?.name == OperatorNameConventions.INVOKE internal fun Candidate.shouldHaveLowPriorityDueToSAM(bodyResolveComponents: BodyResolveComponents): Boolean { diff --git a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.kt b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.kt index aaba4423c11..7535cb0a25b 100644 --- a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.kt +++ b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.kt @@ -3,4 +3,10 @@ fun test(f: (Int) -> Int) { 2.(f)() -} \ No newline at end of file +} + +typealias TA = Int.() -> Int + +fun rest(f: TA) { + 2.(f)() +} diff --git a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.txt b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.txt index 5580ff3d626..1d90cea40fc 100644 --- a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.txt +++ b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.fir.txt @@ -2,3 +2,7 @@ FILE: expressionsInQaSelectorsReceiverConversion.fir.kt public final fun test(f: R|(kotlin/Int) -> kotlin/Int|): R|kotlin/Unit| { R|/f|.R|SubstitutionOverride#|(Int(2)) } + public final typealias TA = R|kotlin/Int.() -> kotlin/Int| + public final fun rest(f: R|TA|): R|kotlin/Unit| { + R|/f|.R|SubstitutionOverride|(Int(2)) + } diff --git a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.kt b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.kt index f9291e4caf7..dc5f567ef10 100644 --- a/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.kt +++ b/compiler/testData/diagnostics/tests/expressionsInQaSelectorsReceiverConversion.kt @@ -4,3 +4,9 @@ fun test(f: (Int) -> Int) { 2.(f)() } + +typealias TA = Int.() -> Int + +fun rest(f: TA) { + 2.(f)() +}