New J2K: Do not convert array types to specialized ones in a case of boxed inner type
This commit is contained in:
committed by
Ilya Kirillov
parent
7494488edb
commit
4a9ba3c756
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user