New J2K: Fixed array initializer

This commit is contained in:
Dimach
2018-06-06 19:43:32 +03:00
committed by Ilya Kirillov
parent 6096b1fd56
commit 8ce3673aaf
@@ -62,6 +62,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
operands.map { it.toJK() }, operands.map { it.toJK() },
Array(operands.lastIndex) { getTokenBeforeOperand(operands[it + 1]) }.map { it?.toJK() ?: TODO() } Array(operands.lastIndex) { getTokenBeforeOperand(operands[it + 1]) }.map { it?.toJK() ?: TODO() }
) )
is PsiArrayInitializerExpression -> toJK()
else -> { else -> {
throw RuntimeException("Not supported: ${this::class}") throw RuntimeException("Not supported: ${this::class}")
} }
@@ -135,13 +136,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
} }
} }
fun PsiArrayInitializerExpression.toJK(): JKExpression {
return JKJavaNewArrayImpl(initializers.map { it.toJK() })
}
fun PsiNewExpression.toJK(): JKExpression { fun PsiNewExpression.toJK(): JKExpression {
assert(this is PsiNewExpressionImpl) assert(this is PsiNewExpressionImpl)
if ((this as PsiNewExpressionImpl).findChildByRole(ChildRole.LBRACKET) != null) { if ((this as PsiNewExpressionImpl).findChildByRole(ChildRole.LBRACKET) != null) {
val arrayInitializer = arrayInitializer return arrayInitializer?.toJK() ?: run {
if (arrayInitializer != null) {
return JKJavaNewArrayImpl(arrayInitializer.initializers.map { it.toJK() })
} else {
val dimensions = mutableListOf<PsiLiteralExpression?>() val dimensions = mutableListOf<PsiLiteralExpression?>()
var child = firstChild var child = firstChild
while (child != null) { while (child != null) {
@@ -155,7 +157,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
} }
child = child.nextSibling child = child.nextSibling
} }
return JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() }) JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() })
} }
} }
val constructedClass = classOrAnonymousClassReference?.resolve() val constructedClass = classOrAnonymousClassReference?.resolve()