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
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user