New J2K: Do not convert array types to specialized ones in a case of boxed inner type

This commit is contained in:
Ilya Kirillov
2019-01-28 17:15:14 +03:00
committed by Ilya Kirillov
parent 7494488edb
commit 4a9ba3c756
3 changed files with 9 additions and 13 deletions
@@ -18,7 +18,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
var newElement = element var newElement = element
if (element is JKJavaNewArray) { if (element is JKJavaNewArray) {
val arrayType = element.type.type.asPrimitiveType() val arrayType = element.type.type as? JKJavaPrimitiveType
val arrayConstructorName = val arrayConstructorName =
if (arrayType != null) if (arrayType != null)
CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString() CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString()
@@ -47,7 +47,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
) )
} else { } else {
JKJavaNewExpressionImpl( JKJavaNewExpressionImpl(
context.symbolProvider.provideByFqName(arrayFqName(type).replace('/', '.')), context.symbolProvider.provideByFqName(type.arrayFqName()),
JKExpressionListImpl(dimensions[0]), JKExpressionListImpl(dimensions[0]),
JKTypeArgumentListImpl(emptyList()) JKTypeArgumentListImpl(emptyList())
) )
@@ -66,7 +66,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
) )
} }
var resultType = JKClassTypeImpl( var resultType = JKClassTypeImpl(
context.symbolProvider.provideByFqName(arrayFqName(type)), context.symbolProvider.provideByFqName(type.arrayFqName()),
if (type is JKJavaPrimitiveType) emptyList() else listOf(type), if (type is JKJavaPrimitiveType) emptyList() else listOf(type),
Nullability.Default Nullability.Default
) )
@@ -83,8 +83,4 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType))) 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()
} }
@@ -114,7 +114,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
) )
is JKJavaArrayType -> is JKJavaArrayType ->
JKClassTypeImpl( JKClassTypeImpl(
context.symbolProvider.provideByFqName(arrayFqName(type)), context.symbolProvider.provideByFqName(type.arrayFqName()),
if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)), if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)),
type.nullability type.nullability
) )
@@ -189,9 +189,4 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
else -> false 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()
} }
@@ -305,6 +305,11 @@ val primitiveTypes =
JvmPrimitiveType.DOUBLE 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 = fun JKClassSymbol.isArrayType(): Boolean =
fqName in fqName in
JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE.values