No parameter name in functional type of lambda with 'it'

This commit is contained in:
Valentin Kipyatkov
2016-09-16 18:27:15 +03:00
parent b2f215227d
commit 86495fd136
@@ -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)