New J2K: Fix ParameterModificationInMethodCallsConversion in a case of varargs parameter

This commit is contained in:
Ilya Kirillov
2019-03-26 22:41:49 +03:00
committed by Ilya Kirillov
parent 8cec43fda3
commit db2ad96f00
2 changed files with 23 additions and 4 deletions
@@ -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)
@@ -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
}