From 9af3e5704de646bbb3bc969be15240271e557809 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Wed, 7 Dec 2022 15:38:17 +0100 Subject: [PATCH] K2: Do not add extension receiver's constraint twice for references The job is already done at CheckExtensionReceiver resolution stage And repeating it might only lead to incorrect errors caused by double-capture of receiver type that leads to contradiction because in previous commit we started assuming different capture instantiations as different types. --- .../calls/CallableReferenceResolution.kt | 8 -------- ...proximateContravariantCapturedTypes.fir.kt | 20 +++++++++---------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt index fa2c3a787dd..5f148908380 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt @@ -70,14 +70,6 @@ internal object CheckCallableReferenceExpectedType : CheckerStage() { ) { addSubtypeConstraint(resultingType, expectedType, position) } - - val declarationReceiverType: ConeKotlinType? = - fir.receiverParameter?.typeRef?.coneType?.let(candidate.substitutor::substituteOrSelf) - - if (resultingReceiverType != null && declarationReceiverType != null) { - val capturedReceiver = context.session.typeContext.captureFromExpression(resultingReceiverType) ?: resultingReceiverType - addSubtypeConstraint(capturedReceiver, declarationReceiverType, position) - } } var isApplicable = true diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/approximateContravariantCapturedTypes.fir.kt b/compiler/testData/diagnostics/tests/inference/capturedTypes/approximateContravariantCapturedTypes.fir.kt index 64f52361d33..56481fbde2f 100644 --- a/compiler/testData/diagnostics/tests/inference/capturedTypes/approximateContravariantCapturedTypes.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/approximateContravariantCapturedTypes.fir.kt @@ -26,15 +26,15 @@ fun Float.bar() {} fun id(x: K) = x fun test1() { - val fooSetRef = Foo<*>::setX + val fooSetRef = , CapturedType(*), CapturedType(*)>")!>Foo<*>::setX - val fooSetRef2 = id( - Foo<*>::setX + val fooSetRef2 = , kotlin.Nothing, kotlin.Number>")!>id( + , CapturedType(*), CapturedType(*)>")!>Foo<*>::setX ) val foo = Foo(1f) - fooSetRef.invoke(foo, 1) - fooSetRef2.invoke(foo, 1) + fooSetRef.invoke(foo, 1) + fooSetRef2.invoke(foo, 1) foo.x.bar() } @@ -53,14 +53,14 @@ fun test2() { } fun test3() { - val fooSetRef = Foo2<*>::setX - val fooSetRef2 = id( - Foo2<*>::setX + val fooSetRef = , CapturedType(*), CapturedType(*)>")!>Foo2<*>::setX + val fooSetRef2 = , kotlin.Nothing, kotlin.Any?>")!>id( + , CapturedType(*), CapturedType(*)>")!>Foo2<*>::setX ) val foo = Foo2(1) - fooSetRef.invoke(foo, "") - fooSetRef2.invoke(foo, "") + fooSetRef.invoke(foo, "") + fooSetRef2.invoke(foo, "") foo.x.bar() }