New J2K: handle spaces in array dimensions declaration

#KT-36891 fixed
This commit is contained in:
Ilya Kirillov
2020-03-27 00:18:31 +03:00
parent 353e884c8f
commit 4d4aa88534
4 changed files with 15 additions and 9 deletions
@@ -46,9 +46,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.*
import org.jetbrains.kotlin.nj2k.types.*
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -492,21 +490,21 @@ class JavaToJKTreeBuilder constructor(
val newExpression =
if (findChildByRole(ChildRole.LBRACKET) != null) {
arrayInitializer?.toJK() ?: run {
val dimensions = mutableListOf<PsiExpression?>()
val dimensions = mutableListOf<JKExpression>()
var child = firstChild
while (child != null) {
if (child.node.elementType == JavaTokenType.LBRACKET) {
child = child.nextSibling
dimensions += if (child.node.elementType == JavaTokenType.RBRACKET) {
null
child = child.getNextSiblingIgnoringWhitespaceAndComments()
if (child.node.elementType == JavaTokenType.RBRACKET) {
dimensions += JKStubExpression()
} else {
child as PsiExpression? //TODO
child.safeAs<PsiExpression>()?.toJK()?.also { dimensions += it }
}
}
child = child.nextSibling
}
JKJavaNewEmptyArray(
dimensions.map { it?.toJK()?.withLineBreaksFrom(it) ?: JKStubExpression() },
dimensions,
JKTypeElement(generateSequence(type?.toJK()) { it.safeAs<JKJavaArrayType>()?.type }.last())
).also {
it.psi = this
@@ -0,0 +1,2 @@
//statement
int[][]d2=new int[ 5 ][ ];
@@ -0,0 +1 @@
val d2 = arrayOfNulls<IntArray>(5)
@@ -320,6 +320,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.java");
}
@TestMetadata("arrayInitializationStatementWithDimensionAndSpace.java")
public void testArrayInitializationStatementWithDimensionAndSpace() throws Exception {
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.java");
}
@TestMetadata("arrayInitializationStatementWithDimensionExplicit.java")
public void testArrayInitializationStatementWithDimensionExplicit() throws Exception {
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionExplicit.java");