From b9c5b63d69028c9098986b8de49c2f8820dcf53a Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 1 Feb 2019 13:20:37 +0300 Subject: [PATCH] Fix #KT-28993 --- .../kotlin/resolve/calls/tower/PSICallResolver.kt | 11 +++++------ .../tests/checkArguments/kt1897_diagnostic_part.kt | 2 +- .../tests/checkArguments/twoLambdasFunction.kt | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index 4cecf7e7a83..4bbbb9ce2e4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -489,11 +489,10 @@ class PSICallResolver( val resolvedTypeArguments = resolveTypeArguments(context, oldCall.typeArguments) - val argumentsInParenthesis = if (oldCall.callType != Call.CallType.ARRAY_SET_METHOD && oldCall.functionLiteralArguments.isEmpty()) { - oldCall.valueArguments - } else { - oldCall.valueArguments.dropLast(1) - } + val lambdasOutsideParenthesis = oldCall.functionLiteralArguments.size + val extraArgumentsNumber = if (oldCall.callType == Call.CallType.ARRAY_SET_METHOD) 1 else lambdasOutsideParenthesis + + val argumentsInParenthesis = oldCall.valueArguments.dropLast(extraArgumentsNumber) val externalLambdaArguments = oldCall.functionLiteralArguments val resolvedArgumentsInParenthesis = resolveArgumentsInParenthesis(context, argumentsInParenthesis) @@ -504,7 +503,7 @@ class PSICallResolver( } oldCall.valueArguments.last() } else { - if (externalLambdaArguments.size > 2) { + if (externalLambdaArguments.size > 1) { externalLambdaArguments.drop(1).mapNotNull { it.getLambdaExpression() }.forEach { context.trace.report(Errors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.on(it)) } diff --git a/compiler/testData/diagnostics/tests/checkArguments/kt1897_diagnostic_part.kt b/compiler/testData/diagnostics/tests/checkArguments/kt1897_diagnostic_part.kt index b310e4485ce..b28554c4250 100644 --- a/compiler/testData/diagnostics/tests/checkArguments/kt1897_diagnostic_part.kt +++ b/compiler/testData/diagnostics/tests/checkArguments/kt1897_diagnostic_part.kt @@ -25,5 +25,5 @@ fun test() { foo("", 1) {} - foo("", 1) {} {} + foo("", 1) {} {} } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/checkArguments/twoLambdasFunction.kt b/compiler/testData/diagnostics/tests/checkArguments/twoLambdasFunction.kt index 32c122a9b66..7a376cca0a4 100644 --- a/compiler/testData/diagnostics/tests/checkArguments/twoLambdasFunction.kt +++ b/compiler/testData/diagnostics/tests/checkArguments/twoLambdasFunction.kt @@ -6,7 +6,7 @@ fun test(x: () -> Unit, y: () -> Unit) { } fun main() { - test { + test { 1 } { 2