New J2K: Use real method symbols in ArrayInitializerConversion
This commit is contained in:
committed by
Ilya Kirillov
parent
71b194d0d6
commit
ec1bc35df7
@@ -18,18 +18,20 @@ 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
|
val arrayType = element.type.type.asPrimitiveType()
|
||||||
|
val arrayConstructorName =
|
||||||
|
if (arrayType != null)
|
||||||
|
CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString()
|
||||||
|
else
|
||||||
|
CollectionLiteralResolver.ARRAY_OF_FUNCTION.asString()
|
||||||
newElement = JKJavaMethodCallExpressionImpl(
|
newElement = JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideByFqName(
|
context.symbolProvider.provideByFqName("kotlin.$arrayConstructorName"),
|
||||||
if (arrayType is JKJavaPrimitiveType)
|
|
||||||
CollectionLiteralResolver.PRIMITIVE_TYPE_TO_ARRAY[PrimitiveType.valueOf(arrayType.jvmPrimitiveType.name)]!!.asString()
|
|
||||||
else
|
|
||||||
CollectionLiteralResolver.ARRAY_OF_FUNCTION.asString()
|
|
||||||
),
|
|
||||||
JKExpressionListImpl(element.initializer.also { element.initializer = emptyList() })
|
JKExpressionListImpl(element.initializer.also { element.initializer = emptyList() })
|
||||||
)
|
)
|
||||||
} else if (element is JKJavaNewEmptyArray) {
|
} else if (element is JKJavaNewEmptyArray) {
|
||||||
newElement = buildArrayInitializer(element.initializer.also { element.initializer = emptyList() }, element.type.type)
|
newElement = buildArrayInitializer(
|
||||||
|
element.initializer.also { element.initializer = emptyList() }, element.type.type
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return recurse(newElement)
|
return recurse(newElement)
|
||||||
@@ -37,19 +39,23 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
|
|||||||
|
|
||||||
private fun buildArrayInitializer(dimensions: List<JKExpression>, type: JKType): JKExpression {
|
private fun buildArrayInitializer(dimensions: List<JKExpression>, type: JKType): JKExpression {
|
||||||
if (dimensions.size == 1) {
|
if (dimensions.size == 1) {
|
||||||
val methodOrConstructorReference = if (type !is JKJavaPrimitiveType)
|
return if (type !is JKJavaPrimitiveType) {
|
||||||
context.symbolProvider.provideByFqName("kotlin/arrayOfNulls")
|
JKJavaMethodCallExpressionImpl(
|
||||||
else
|
context.symbolProvider.provideByFqName("kotlin/arrayOfNulls"),
|
||||||
JKUnresolvedMethod(arrayFqName(type).replace('/', '.')/*TODO resolve real reference*/)
|
JKExpressionListImpl(dimensions[0]),
|
||||||
return JKJavaMethodCallExpressionImpl(
|
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(type.updateNullability(Nullability.NotNull))))
|
||||||
methodOrConstructorReference,
|
)
|
||||||
JKExpressionListImpl(dimensions[0]),
|
} else {
|
||||||
JKTypeArgumentListImpl(if (type is JKJavaPrimitiveType) emptyList() else listOf(JKTypeElementImpl(type)))
|
JKJavaNewExpressionImpl(
|
||||||
)
|
context.symbolProvider.provideByFqName(arrayFqName(type).replace('/', '.')),
|
||||||
|
JKExpressionListImpl(dimensions[0]),
|
||||||
|
JKTypeArgumentListImpl(emptyList())
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (dimensions[1] !is JKStubExpression) {
|
if (dimensions[1] !is JKStubExpression) {
|
||||||
return JKJavaMethodCallExpressionImpl(
|
return JKJavaMethodCallExpressionImpl(
|
||||||
JKUnresolvedMethod("kotlin.Array"),//TODO resolve real reference
|
context.symbolProvider.provideByFqName("kotlin.Array"),
|
||||||
JKExpressionListImpl(
|
JKExpressionListImpl(
|
||||||
dimensions[0],
|
dimensions[0],
|
||||||
JKLambdaExpressionImpl(
|
JKLambdaExpressionImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user