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 package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.nj2k.ConversionContext import org.jetbrains.kotlin.nj2k.ConversionContext
import org.jetbrains.kotlin.nj2k.hasWritableUsages import org.jetbrains.kotlin.nj2k.hasWritableUsages
import org.jetbrains.kotlin.nj2k.tree.JKMethod import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
import org.jetbrains.kotlin.nj2k.tree.Mutability
import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.nj2k.tree.impl.*
@@ -19,8 +18,23 @@ class ParameterModificationInMethodCallsConversion(private val context: Conversi
val newVariables = val newVariables =
element.parameters.mapNotNull { parameter -> element.parameters.mapNotNull { parameter ->
if (parameter.hasWritableUsages(element.block, context)) { 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( JKLocalVariableImpl(
JKTypeElementImpl(parameter.type.type), JKTypeElementImpl(parameterType),
JKNameIdentifierImpl(parameter.name.value), JKNameIdentifierImpl(parameter.name.value),
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)), JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)),
JKMutabilityModifierElementImpl(Mutability.MUTABLE) JKMutabilityModifierElementImpl(Mutability.MUTABLE)
@@ -109,6 +109,11 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)), if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)),
nullability nullability
) )
is JKVarianceTypeParameterType ->
JKVarianceTypeParameterTypeImpl(
variance,
boundType.mapType(null)
)
else -> this else -> this
} }