New J2K: Fix ParameterModificationInMethodCallsConversion in a case of varargs parameter
This commit is contained in:
committed by
Ilya Kirillov
parent
8cec43fda3
commit
db2ad96f00
+18
-4
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user