[NI] Place varargs at the end of value arguments list
This is needed to preserve behavior with the OI
This commit is contained in:
+16
-3
@@ -60,9 +60,11 @@ import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDeleg
|
|||||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
||||||
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.collections.LinkedHashMap
|
||||||
|
|
||||||
class KotlinToResolvedCallTransformer(
|
class KotlinToResolvedCallTransformer(
|
||||||
private val callCheckers: Iterable<CallChecker>,
|
private val callCheckers: Iterable<CallChecker>,
|
||||||
@@ -620,16 +622,21 @@ sealed class NewAbstractResolvedCall<D : CallableDescriptor>() : ResolvedCall<D>
|
|||||||
|
|
||||||
private fun createValueArguments(): Map<ValueParameterDescriptor, ResolvedValueArgument> =
|
private fun createValueArguments(): Map<ValueParameterDescriptor, ResolvedValueArgument> =
|
||||||
LinkedHashMap<ValueParameterDescriptor, ResolvedValueArgument>().also { result ->
|
LinkedHashMap<ValueParameterDescriptor, ResolvedValueArgument>().also { result ->
|
||||||
|
var varargMappings: MutableList<Pair<ValueParameterDescriptor, VarargValueArgument>>? = null
|
||||||
for ((originalParameter, resolvedCallArgument) in argumentMappingByOriginal) {
|
for ((originalParameter, resolvedCallArgument) in argumentMappingByOriginal) {
|
||||||
val resultingParameter = resultingDescriptor.valueParameters[originalParameter.index]
|
val resultingParameter = resultingDescriptor.valueParameters[originalParameter.index]
|
||||||
|
|
||||||
result[resultingParameter] = when (resolvedCallArgument) {
|
result[resultingParameter] = when (resolvedCallArgument) {
|
||||||
ResolvedCallArgument.DefaultArgument ->
|
ResolvedCallArgument.DefaultArgument ->
|
||||||
DefaultValueArgument.DEFAULT
|
DefaultValueArgument.DEFAULT
|
||||||
is ResolvedCallArgument.SimpleArgument -> {
|
is ResolvedCallArgument.SimpleArgument -> {
|
||||||
val valueArgument = resolvedCallArgument.callArgument.psiCallArgument.valueArgument
|
val valueArgument = resolvedCallArgument.callArgument.psiCallArgument.valueArgument
|
||||||
if (resultingParameter.isVararg)
|
if (resultingParameter.isVararg) {
|
||||||
VarargValueArgument().apply { addArgument(valueArgument) }
|
val vararg = VarargValueArgument().apply { addArgument(valueArgument) }
|
||||||
else
|
if (varargMappings == null) varargMappings = SmartList()
|
||||||
|
varargMappings.add(resultingParameter to vararg)
|
||||||
|
continue
|
||||||
|
} else
|
||||||
ExpressionValueArgument(valueArgument)
|
ExpressionValueArgument(valueArgument)
|
||||||
}
|
}
|
||||||
is ResolvedCallArgument.VarargArgument ->
|
is ResolvedCallArgument.VarargArgument ->
|
||||||
@@ -638,6 +645,12 @@ sealed class NewAbstractResolvedCall<D : CallableDescriptor>() : ResolvedCall<D>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (varargMappings != null) {
|
||||||
|
for ((parameter, argument) in varargMappings) {
|
||||||
|
result[parameter] = argument
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// !LANGUAGE: -NewInference
|
|
||||||
// IGNORE_BACKEND: JS
|
// IGNORE_BACKEND: JS
|
||||||
// NO_CHECK_LAMBDA_INLINING
|
// NO_CHECK_LAMBDA_INLINING
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// !LANGUAGE: -NewInference
|
|
||||||
// IGNORE_BACKEND: JVM_IR
|
// IGNORE_BACKEND: JVM_IR
|
||||||
// IGNORE_BACKEND: JS, JS_IR
|
// IGNORE_BACKEND: JS, JS_IR
|
||||||
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR
|
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR
|
||||||
|
|||||||
Reference in New Issue
Block a user