From 4d4aa8853481830a9b94c64830538a970768ca83 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 27 Mar 2020 00:18:31 +0300 Subject: [PATCH] New J2K: handle spaces in array dimensions declaration #KT-36891 fixed --- .../jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt | 16 +++++++--------- ...ializationStatementWithDimensionAndSpace.java | 2 ++ ...itializationStatementWithDimensionAndSpace.kt | 1 + ...ToKotlinConverterSingleFileTestGenerated.java | 5 +++++ 4 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.java create mode 100644 nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.kt diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt index 2b1d33b056a..607d6b78730 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt @@ -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() + val dimensions = mutableListOf() 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()?.toJK()?.also { dimensions += it } } } child = child.nextSibling } JKJavaNewEmptyArray( - dimensions.map { it?.toJK()?.withLineBreaksFrom(it) ?: JKStubExpression() }, + dimensions, JKTypeElement(generateSequence(type?.toJK()) { it.safeAs()?.type }.last()) ).also { it.psi = this diff --git a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.java b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.java new file mode 100644 index 00000000000..858e4db015f --- /dev/null +++ b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.java @@ -0,0 +1,2 @@ +//statement +int[][]d2=new int[ 5 ][ ]; \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.kt b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.kt new file mode 100644 index 00000000000..1462d0c46d1 --- /dev/null +++ b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionAndSpace.kt @@ -0,0 +1 @@ +val d2 = arrayOfNulls(5) \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index e520fa200ea..cb1c23a445e 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -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");