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 {
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()
}
@@ -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()
}
@@ -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