From ec1bc35df7dfc69c08a8a6186555743c5a01ec68 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 24 Dec 2018 12:03:30 +0300 Subject: [PATCH] New J2K: Use real method symbols in ArrayInitializerConversion --- .../conversions/ArrayInitializerConversion.kt | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt index a7766424e7f..1bc832a0d82 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt @@ -18,18 +18,20 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur override fun applyToElement(element: JKTreeElement): JKTreeElement { var newElement = element if (element is JKJavaNewArray) { - val arrayType = element.type.type + val arrayType = element.type.type.asPrimitiveType() + val arrayConstructorName = + if (arrayType != null) + CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString() + else + CollectionLiteralResolver.ARRAY_OF_FUNCTION.asString() newElement = JKJavaMethodCallExpressionImpl( - context.symbolProvider.provideByFqName( - if (arrayType is JKJavaPrimitiveType) - CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString() - else - CollectionLiteralResolver.ARRAY_OF_FUNCTION.asString() - ), + context.symbolProvider.provideByFqName("kotlin.$arrayConstructorName"), JKExpressionListImpl(element.initializer.also { element.initializer = emptyList() }) ) } else if (element is JKJavaNewEmptyArray) { - newElement = buildArrayInitializer(element.initializer.also { element.initializer = emptyList() }, element.type.type) + newElement = buildArrayInitializer( + element.initializer.also { element.initializer = emptyList() }, element.type.type + ) } return recurse(newElement) @@ -37,19 +39,23 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur private fun buildArrayInitializer(dimensions: List, type: JKType): JKExpression { if (dimensions.size == 1) { - val methodOrConstructorReference = if (type !is JKJavaPrimitiveType) - context.symbolProvider.provideByFqName("kotlin/arrayOfNulls") - else - JKUnresolvedMethod(arrayFqName(type).replace('/', '.')/*TODO resolve real reference*/) - return JKJavaMethodCallExpressionImpl( - methodOrConstructorReference, - JKExpressionListImpl(dimensions[0]), - JKTypeArgumentListImpl(if (type is JKJavaPrimitiveType) emptyList() else listOf(JKTypeElementImpl(type))) - ) + return if (type !is JKJavaPrimitiveType) { + JKJavaMethodCallExpressionImpl( + context.symbolProvider.provideByFqName("kotlin/arrayOfNulls"), + JKExpressionListImpl(dimensions[0]), + JKTypeArgumentListImpl(listOf(JKTypeElementImpl(type.updateNullability(Nullability.NotNull)))) + ) + } else { + JKJavaNewExpressionImpl( + context.symbolProvider.provideByFqName(arrayFqName(type).replace('/', '.')), + JKExpressionListImpl(dimensions[0]), + JKTypeArgumentListImpl(emptyList()) + ) + } } if (dimensions[1] !is JKStubExpression) { return JKJavaMethodCallExpressionImpl( - JKUnresolvedMethod("kotlin.Array"),//TODO resolve real reference + context.symbolProvider.provideByFqName("kotlin.Array"), JKExpressionListImpl( dimensions[0], JKLambdaExpressionImpl(