diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 1a3d1618489..311a2616fa3 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -892,26 +892,12 @@ class CallAndReferenceGenerator( if (argumentsCount <= valueArgumentsCount) { apply { val (valueParameters, argumentMapping, substitutor) = extractArgumentsMapping(call) - if (argumentMapping != null && (visitor.annotationMode || argumentMapping.isNotEmpty())) { - if (valueParameters != null) { - return applyArgumentsWithReorderingIfNeeded( - argumentMapping, valueParameters, substitutor, contextReceiverCount, call, - ) - } - } - // Case without argument mapping (deserialized annotation) - // TODO: support argument mapping in deserialized annotations and remove me - for ((index, argument) in call.arguments.withIndex()) { - val valueParameter = when (argument) { - is FirNamedArgumentExpression -> valueParameters?.find { it.name == argument.name } - else -> null - } ?: valueParameters?.get(index) - val argumentExpression = convertArgument(argument, valueParameter, substitutor) - putValueArgument( - (valueParameters?.indexOf(valueParameter)?.takeIf { it >= 0 } ?: index) + contextReceiverCount, - argumentExpression + if (argumentMapping != null && (visitor.annotationMode || argumentMapping.isNotEmpty()) && valueParameters != null) { + return applyArgumentsWithReorderingIfNeeded( + argumentMapping, valueParameters, substitutor, contextReceiverCount, call, ) } + check(argumentsCount == 0) { "Non-empty unresolved argument list." } } } else { val calleeSymbol = (this as? IrCallImpl)?.symbol diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 33afd025695..d73d89220ff 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -1635,23 +1635,25 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT dispatchReceiver = lhsGetCall.dispatchReceiver } calleeReference = lhsGetCall.calleeReference - argumentList = buildArgumentList { - var i = 0 - for (argument in lhsGetCall.argumentList.arguments) { - arguments += if (argument is FirVarargArgumentsExpression) { - buildVarargArgumentsExpression { - val varargSize = argument.arguments.size - arguments += indicesQualifiedAccessForGet.subList(i, i + varargSize) - i += varargSize - source = argument.source - coneTypeOrNull = argument.resolvedType - coneElementTypeOrNull = argument.coneElementTypeOrNull - } - } else { - indicesQualifiedAccessForGet[i++] + var i = 0 + val newMapping = (lhsGetCall.argumentList as FirResolvedArgumentList).mapping.mapKeysTo(LinkedHashMap()) { (argument) -> + if (argument is FirVarargArgumentsExpression) { + buildVarargArgumentsExpression { + val varargSize = argument.arguments.size + arguments += indicesQualifiedAccessForGet.subList(i, i + varargSize) + i += varargSize + source = argument.source + coneTypeOrNull = argument.resolvedType + coneElementTypeOrNull = argument.coneElementTypeOrNull } + } else { + indicesQualifiedAccessForGet[i++] } } + argumentList = buildResolvedArgumentList( + lhsGetCall.argumentList, + newMapping, + ) origin = FirFunctionCallOrigin.Operator coneTypeOrNull = lhsGetCall.resolvedType }