diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt index 628b1ea04eb..ecf3bc09faa 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt @@ -32,17 +32,13 @@ abstract class ArgumentGenerator { * @see kotlin.reflect.jvm.internal.KCallableImpl.callBy */ open fun generate(valueArgumentsByIndex: List, actualArgs: List): DefaultCallMask { - //HACK: see tempVariable in ExpressionCodegen - assert (valueArgumentsByIndex.size() == actualArgs.size()) - val actualArguments = if (actualArgs.isNotEmpty()) actualArgs else valueArgumentsByIndex - - assert(valueArgumentsByIndex.size() == actualArguments.size()) { - "Value arguments collection should have same size, but ${valueArgumentsByIndex.size()} != ${actualArguments.size()}" + assert(valueArgumentsByIndex.size() == actualArgs.size()) { + "Value arguments collection should have same size, but ${valueArgumentsByIndex.size()} != ${actualArgs.size()}" } val arg2Index = valueArgumentsByIndex.mapToIndex() - val actualArgsWithDeclIndex = actualArguments.filter { it !is DefaultValueArgument }.map { + val actualArgsWithDeclIndex = actualArgs.filter { it !is DefaultValueArgument }.map { ArgumentAndDeclIndex(it, arg2Index[it]!!) }.toArrayList() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionReferenceGenerationStrategy.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionReferenceGenerationStrategy.java index 9ea0bc24122..bfede554d54 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionReferenceGenerationStrategy.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionReferenceGenerationStrategy.java @@ -36,9 +36,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.*; import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory; import static org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER; @@ -75,6 +73,18 @@ public class FunctionReferenceGenerationStrategy extends FunctionGenerationStrat computeAndSaveArguments(fakeArguments, codegen); ResolvedCall fakeResolvedCall = new DelegatingResolvedCall(resolvedCall) { + + private final Map argumentMap; + { + argumentMap = new LinkedHashMap(fakeArguments.size()); + int index = 0; + List parameters = callableDescriptor.getValueParameters(); + for (ValueArgument argument : fakeArguments) { + argumentMap.put(parameters.get(index), new ExpressionValueArgument(argument)); + index++; + } + } + @NotNull @Override public ReceiverValue getExtensionReceiver() { @@ -90,11 +100,13 @@ public class FunctionReferenceGenerationStrategy extends FunctionGenerationStrat @NotNull @Override public List getValueArgumentsByIndex() { - List result = new ArrayList(fakeArguments.size()); - for (ValueArgument argument : fakeArguments) { - result.add(new ExpressionValueArgument(argument)); - } - return result; + return new ArrayList(argumentMap.values()); + } + + @NotNull + @Override + public Map getValueArguments() { + return argumentMap; } };