diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt index cf3d7569476..5425bab7cc7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors.* +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries import org.jetbrains.kotlin.resolve.* @@ -122,17 +123,25 @@ internal class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Expre return createTypeInfo(components.dataFlowAnalyzer.checkStatementType(function, context), context) } else { - return components.dataFlowAnalyzer.createCheckedTypeInfo(functionDescriptor.createFunctionType(), context, function) + return components.dataFlowAnalyzer.createCheckedTypeInfo(functionDescriptor.createFunctionType(context), context, function) } } - private fun SimpleFunctionDescriptor.createFunctionType(): KotlinType? { + private fun SimpleFunctionDescriptor.createFunctionType(context: ExpressionTypingContext): KotlinType? { + val bindingContext = context.trace.bindingContext + val parameterNames = valueParameters.map { + // do not include auto-created 'it' into the type signature + if (bindingContext[BindingContext.AUTO_CREATED_IT, it] != true) + it.name + else + SpecialNames.NO_NAME_PROVIDED + } return createFunctionType( components.builtIns, Annotations.EMPTY, extensionReceiverParameter?.type, valueParameters.map { it.type }, - valueParameters.map { it.name }, + parameterNames, returnType ?: return null ) } @@ -151,7 +160,7 @@ internal class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Expre val safeReturnType = computeReturnType(expression, context, functionDescriptor, functionTypeExpected) functionDescriptor.setReturnType(safeReturnType) - val resultType = functionDescriptor.createFunctionType()!! + val resultType = functionDescriptor.createFunctionType(context)!! if (functionTypeExpected) { // all checks were done before return createTypeInfo(resultType, context)