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 {
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user