From db2ad96f008c34a6b44edb7091848263129b31db Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 26 Mar 2019 22:41:49 +0300 Subject: [PATCH] New J2K: Fix ParameterModificationInMethodCallsConversion in a case of varargs parameter --- ...eterModificationInMethodCallsConversion.kt | 22 +++++++++++++++---- .../nj2k/conversions/TypeMappingConversion.kt | 5 +++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ParameterModificationInMethodCallsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ParameterModificationInMethodCallsConversion.kt index a52aeccd6f6..57cfe401eb6 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ParameterModificationInMethodCallsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ParameterModificationInMethodCallsConversion.kt @@ -5,11 +5,10 @@ package org.jetbrains.kotlin.nj2k.conversions +import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.nj2k.ConversionContext import org.jetbrains.kotlin.nj2k.hasWritableUsages -import org.jetbrains.kotlin.nj2k.tree.JKMethod -import org.jetbrains.kotlin.nj2k.tree.JKTreeElement -import org.jetbrains.kotlin.nj2k.tree.Mutability +import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* @@ -19,8 +18,23 @@ class ParameterModificationInMethodCallsConversion(private val context: Conversi val newVariables = element.parameters.mapNotNull { parameter -> if (parameter.hasWritableUsages(element.block, context)) { + val parameterType = + if (parameter.isVarArgs) { + JKClassTypeImpl( + context.symbolProvider.provideByFqName(parameter.type.type.arrayFqName()), + if (parameter.type.type is JKJavaPrimitiveType) emptyList() + else listOf( + JKVarianceTypeParameterTypeImpl( + JKVarianceTypeParameterType.Variance.OUT, + parameter.type.type + ) + ), + Nullability.NotNull + ) + + } else parameter.type.type JKLocalVariableImpl( - JKTypeElementImpl(parameter.type.type), + JKTypeElementImpl(parameterType), JKNameIdentifierImpl(parameter.name.value), JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)), JKMutabilityModifierElementImpl(Mutability.MUTABLE) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt index 77b94a0e80e..510a1745a90 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt @@ -109,6 +109,11 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)), nullability ) + is JKVarianceTypeParameterType -> + JKVarianceTypeParameterTypeImpl( + variance, + boundType.mapType(null) + ) else -> this }