New J2K: handle spaces in array dimensions declaration
#KT-36891 fixed
This commit is contained in:
@@ -46,9 +46,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.*
|
import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.*
|
||||||
import org.jetbrains.kotlin.nj2k.types.*
|
import org.jetbrains.kotlin.nj2k.types.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
|
|
||||||
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
@@ -492,21 +490,21 @@ class JavaToJKTreeBuilder constructor(
|
|||||||
val newExpression =
|
val newExpression =
|
||||||
if (findChildByRole(ChildRole.LBRACKET) != null) {
|
if (findChildByRole(ChildRole.LBRACKET) != null) {
|
||||||
arrayInitializer?.toJK() ?: run {
|
arrayInitializer?.toJK() ?: run {
|
||||||
val dimensions = mutableListOf<PsiExpression?>()
|
val dimensions = mutableListOf<JKExpression>()
|
||||||
var child = firstChild
|
var child = firstChild
|
||||||
while (child != null) {
|
while (child != null) {
|
||||||
if (child.node.elementType == JavaTokenType.LBRACKET) {
|
if (child.node.elementType == JavaTokenType.LBRACKET) {
|
||||||
child = child.nextSibling
|
child = child.getNextSiblingIgnoringWhitespaceAndComments()
|
||||||
dimensions += if (child.node.elementType == JavaTokenType.RBRACKET) {
|
if (child.node.elementType == JavaTokenType.RBRACKET) {
|
||||||
null
|
dimensions += JKStubExpression()
|
||||||
} else {
|
} else {
|
||||||
child as PsiExpression? //TODO
|
child.safeAs<PsiExpression>()?.toJK()?.also { dimensions += it }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child = child.nextSibling
|
child = child.nextSibling
|
||||||
}
|
}
|
||||||
JKJavaNewEmptyArray(
|
JKJavaNewEmptyArray(
|
||||||
dimensions.map { it?.toJK()?.withLineBreaksFrom(it) ?: JKStubExpression() },
|
dimensions,
|
||||||
JKTypeElement(generateSequence(type?.toJK()) { it.safeAs<JKJavaArrayType>()?.type }.last())
|
JKTypeElement(generateSequence(type?.toJK()) { it.safeAs<JKJavaArrayType>()?.type }.last())
|
||||||
).also {
|
).also {
|
||||||
it.psi = this
|
it.psi = this
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
//statement
|
||||||
|
int[][]d2=new int[ 5 ][ ];
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
val d2 = arrayOfNulls<IntArray>(5)
|
||||||
+5
@@ -320,6 +320,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew
|
|||||||
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.java");
|
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")
|
@TestMetadata("arrayInitializationStatementWithDimensionExplicit.java")
|
||||||
public void testArrayInitializationStatementWithDimensionExplicit() throws Exception {
|
public void testArrayInitializationStatementWithDimensionExplicit() throws Exception {
|
||||||
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionExplicit.java");
|
runTest("nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimensionExplicit.java");
|
||||||
|
|||||||
Reference in New Issue
Block a user