From 8fca6ebedfed54751010aa0505cbd268e4148c64 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Fri, 7 Dec 2018 14:47:45 +0300 Subject: [PATCH] [groovy] reorganize code so the assertion in not necessary anymore (EA-133372) After the change each iteration of the loop generates an argument (possibly nullable), this is enforced by compiler because of if-expression, and the total number of iterations is the number of parameters. I've never really managed to reproduce the problem, but now it must be gone. --- .../resolve/impl/PositionalArgumentMapping.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/impl/PositionalArgumentMapping.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/impl/PositionalArgumentMapping.kt index 102279b1f831..95c19d56cec0 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/impl/PositionalArgumentMapping.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/impl/PositionalArgumentMapping.kt @@ -58,23 +58,23 @@ private fun mapByPosition(arguments: List, return null } - val result = LinkedHashMap(parameterCount) + val result = ArrayList>(parameterCount) val argumentIterator = arguments.iterator() var optionalArgsLeft = argumentsCount - requiredParametersCount for (parameter in parameters) { val optional = isOptional(parameter) - if (argumentIterator.hasNext()) { + val argument = if (argumentIterator.hasNext()) { if (!optional) { - result[parameter] = argumentIterator.next() + argumentIterator.next() } else if (optionalArgsLeft > 0) { optionalArgsLeft-- - result[parameter] = argumentIterator.next() + argumentIterator.next() } else { // No argument passed for this parameter. // Don't call next() on argument iterator, so current argument will be used for next parameter. - result[parameter] = null + null } } else { @@ -82,13 +82,13 @@ private fun mapByPosition(arguments: List, require(optional || partial) { "argumentsCount < requiredParameters. This should happen only in partial mode" } - result[parameter] = null + null } + result += Pair(parameter, argument) } require(!argumentIterator.hasNext() || partial) { "argumentsCount > parametersCount. This should happen only in partial mode." } - require(result.size == parameterCount) - return result + return result.toMap(LinkedHashMap()) }