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 acc49e22213..e3affaf7df5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/FunctionsTypingVisitor.kt @@ -27,11 +27,8 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.BindingContext.EXPECTED_RETURN_TYPE -import org.jetbrains.kotlin.resolve.BindingContextUtils -import org.jetbrains.kotlin.resolve.BindingTrace -import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope import org.jetbrains.kotlin.resolve.source.toSourceElement @@ -141,7 +138,10 @@ public class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Express val functionTypeExpected = !noExpectedType(expectedType) && KotlinBuiltIns.isFunctionOrExtensionFunctionType(expectedType) val functionDescriptor = createFunctionLiteralDescriptor(expression, context) - expression.valueParameters.forEach { components.identifierChecker.checkDeclaration(it, context.trace) } + expression.valueParameters.forEach { + components.identifierChecker.checkDeclaration(it, context.trace) + UnderscoreChecker.checkNamed(it, context.trace) + } val safeReturnType = computeReturnType(expression, context, functionDescriptor, functionTypeExpected) functionDescriptor.setReturnType(safeReturnType) diff --git a/compiler/testData/diagnostics/tests/Underscore.kt b/compiler/testData/diagnostics/tests/Underscore.kt index 917b084b171..db8f1220b3a 100644 --- a/compiler/testData/diagnostics/tests/Underscore.kt +++ b/compiler/testData/diagnostics/tests/Underscore.kt @@ -14,3 +14,7 @@ fun __(___: Int, y val `_` = __________ __@ return if (y != null) __(____, y) else __(`_`, ______) } + +fun doIt(f: (Any?) -> Any?) = f(null) + +val something = doIt { __ -> __ } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/Underscore.txt b/compiler/testData/diagnostics/tests/Underscore.txt index a7e038f844e..58e59817fce 100644 --- a/compiler/testData/diagnostics/tests/Underscore.txt +++ b/compiler/testData/diagnostics/tests/Underscore.txt @@ -1,7 +1,9 @@ package public val ______: _ +public val something: kotlin.Any? public fun __(/*0*/ ___: kotlin.Int, /*1*/ y: _?): kotlin.Int +public fun doIt(/*0*/ f: (kotlin.Any?) -> kotlin.Any?): kotlin.Any? @kotlin.Deprecated(message = "") @kotlin.data() public final class Pair { public constructor Pair(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)