diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index 6baf15b9c8e..8cae8ae2f7a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType -import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType -import org.jetbrains.kotlin.builtins.isFunctionType +import org.jetbrains.kotlin.builtins.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl @@ -152,10 +149,12 @@ class FunctionDescriptorResolver( val receiverTypeRef = function.receiverTypeReference val receiverType = - if (receiverTypeRef != null) + if (receiverTypeRef != null) { typeResolver.resolveType(innerScope, receiverTypeRef, trace, true) - else - expectedFunctionType.getReceiverType() + } + else { + if (function is KtFunctionLiteral) expectedFunctionType.getReceiverType() else null + } val valueParameterDescriptors = createValueParameterDescriptors(function, functionDescriptor, innerScope, trace, expectedFunctionType) diff --git a/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.kt b/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.kt new file mode 100644 index 00000000000..a2bfae79869 --- /dev/null +++ b/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.kt @@ -0,0 +1,2 @@ +fun foo(f: String.() -> Int) {} +val test = foo( Int; \(\) -> [ERROR : Error function type])!>fun () = length) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.txt b/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.txt new file mode 100644 index 00000000000..4181255b81a --- /dev/null +++ b/compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.txt @@ -0,0 +1,4 @@ +package + +public val test: kotlin.Unit +public fun foo(/*0*/ f: kotlin.String.() -> kotlin.Int): kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 21e7c15e695..0ad1ee29bdf 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -7161,6 +7161,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("ReceiverByExpectedType.kt") + public void testReceiverByExpectedType() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionAsExpression/ReceiverByExpectedType.kt"); + doTest(fileName); + } + @TestMetadata("ReturnAndLabels.kt") public void testReturnAndLabels() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionAsExpression/ReturnAndLabels.kt");