diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt index 412ab292fd5..c9910595cc6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt @@ -556,6 +556,14 @@ class DelegatedPropertyResolver( isGet = true, isComplete = true ) + if (variableDescriptor.isVar && variableDescriptor.returnType !is DeferredType) { + getGetSetValueMethod( + variableDescriptor, delegateExpression, typeInfoForGetValueReceiver.type ?: return null, + traceToResolveConventionMethods, scopeForDelegate, typeInfoForGetValueReceiver.dataFlowInfo, + isGet = false, isComplete = true + ) + } + val call = delegateExpression.getCall(traceToResolveConventionMethods.bindingContext) val pretendReturnType = call.getResolvedCall(traceToResolveConventionMethods.bindingContext)?.resultingDescriptor?.returnType return pretendReturnType?.takeUnless { it.contains { it.constructor is TypeVariableTypeConstructor } } diff --git a/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.kt b/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.kt new file mode 100644 index 00000000000..efc97fc4e05 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.kt @@ -0,0 +1,10 @@ +import kotlin.reflect.KProperty + +class MyMetadata(val default: R) { + operator fun getValue(thisRef: T, desc: KProperty<*>): R = TODO() + operator fun setValue(thisRef: T, desc: KProperty<*>, value: R) {} +} + +interface Something +class MyReceiver +var MyReceiver.something: Something? by MyMetadata(default = null) diff --git a/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.txt b/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.txt new file mode 100644 index 00000000000..385fc3bbae9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.txt @@ -0,0 +1,26 @@ +package + +public var MyReceiver.something: Something? + +public final class MyMetadata { + public constructor MyMetadata(/*0*/ default: R) + public final val default: R + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final operator fun getValue(/*0*/ thisRef: T, /*1*/ desc: kotlin.reflect.KProperty<*>): R + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final operator fun setValue(/*0*/ thisRef: T, /*1*/ desc: kotlin.reflect.KProperty<*>, /*2*/ value: R): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class MyReceiver { + public constructor MyReceiver() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Something { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 39025b8ddce..ec0b1480d60 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -16702,6 +16702,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("delegationWithReceiver.kt") + public void testDelegationWithReceiver() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.kt"); + doTest(fileName); + } + @TestMetadata("DoubleDefine.kt") public void testDoubleDefine() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/DoubleDefine.kt");