From 4a9ba3c75692a8267d2fbecd42aa5637ccd39c44 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 28 Jan 2019 17:15:14 +0300 Subject: [PATCH] New J2K: Do not convert array types to specialized ones in a case of boxed inner type --- .../j2k/conversions/ArrayInitializerConversion.kt | 10 +++------- .../kotlin/j2k/conversions/TypeMappingConversion.kt | 7 +------ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt | 5 +++++ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt index 5ca8e5b0072..8e5121510c8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayInitializerConversion.kt @@ -18,7 +18,7 @@ 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.asPrimitiveType() + val arrayType = element.type.type as? JKJavaPrimitiveType val arrayConstructorName = if (arrayType != null) CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString() @@ -47,7 +47,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur ) } else { JKJavaNewExpressionImpl( - context.symbolProvider.provideByFqName(arrayFqName(type).replace('/', '.')), + context.symbolProvider.provideByFqName(type.arrayFqName()), JKExpressionListImpl(dimensions[0]), JKTypeArgumentListImpl(emptyList()) ) @@ -66,7 +66,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur ) } var resultType = JKClassTypeImpl( - context.symbolProvider.provideByFqName(arrayFqName(type)), + context.symbolProvider.provideByFqName(type.arrayFqName()), if (type is JKJavaPrimitiveType) emptyList() else listOf(type), Nullability.Default ) @@ -83,8 +83,4 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType))) ) } - - private fun arrayFqName(type: JKType): String = if (type is JKJavaPrimitiveType) - PrimitiveType.valueOf(type.jvmPrimitiveType.name).arrayTypeFqName.asString() - else KotlinBuiltIns.FQ_NAMES.array.asString() } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt index 12ea89329a7..b2bbdc53011 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt @@ -114,7 +114,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl ) is JKJavaArrayType -> JKClassTypeImpl( - context.symbolProvider.provideByFqName(arrayFqName(type)), + context.symbolProvider.provideByFqName(type.arrayFqName()), if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)), type.nullability ) @@ -189,9 +189,4 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl else -> false } } - - private fun arrayFqName(type: JKType): String = - if (type is JKJavaPrimitiveType) - PrimitiveType.valueOf(type.jvmPrimitiveType.name).arrayTypeFqName.asString() - else KotlinBuiltIns.FQ_NAMES.array.asString() } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index cd1076d46a7..749fcff9d32 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -305,6 +305,11 @@ val primitiveTypes = JvmPrimitiveType.DOUBLE ) +fun JKType.arrayFqName(): String = + if (this is JKJavaPrimitiveType) + PrimitiveType.valueOf(jvmPrimitiveType.name).arrayTypeFqName.asString() + else KotlinBuiltIns.FQ_NAMES.array.asString() + fun JKClassSymbol.isArrayType(): Boolean = fqName in JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values