diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt index 054dea3464e..9a12c6cf698 100644 --- a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt +++ b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt @@ -2,6 +2,7 @@ package org.jetbrains.jet.j2k.ast import org.jetbrains.jet.j2k.ast.types.ArrayType import org.jetbrains.jet.j2k.ast.types.Type +import org.jetbrains.jet.j2k.ast.types.PrimitiveType public open class ArrayWithoutInitializationExpression(val `type` : Type, val expressions : List) : Expression() { public override fun toKotlin() : String { @@ -9,7 +10,7 @@ public open class ArrayWithoutInitializationExpression(val `type` : Type, val ex return constructInnerType(`type`, expressions) } - return getConstructorName(`type`) + return getConstructorName(`type`, expressions.size() != 0) } private fun constructInnerType(hostType : ArrayType, expressions: List) : String { @@ -22,7 +23,7 @@ public open class ArrayWithoutInitializationExpression(val `type` : Type, val ex return oneDim(hostType, expressions[0], "{" + constructInnerType(innerType, expressions.subList(1, expressions.size())) + "}") } - return getConstructorName(hostType) + return getConstructorName(hostType, expressions.size() != 0) } class object { @@ -31,9 +32,24 @@ public open class ArrayWithoutInitializationExpression(val `type` : Type, val ex } private open fun oneDim(`type` : Type, size : Expression, init : String) : String { - return getConstructorName(`type`) + "(" + size.toKotlin() + init.withPrefix(", ") + ")" + return getConstructorName(`type`, !init.isEmpty()) + "(" + size.toKotlin() + init.withPrefix(", ") + ")" } - private open fun getConstructorName(`type` : Type) : String = `type`.convertedToNotNull().toKotlin() + private open fun getConstructorName(`type` : Type, hasInit : Boolean) : String { + return if (`type` is ArrayType) + when (`type`.elementType) { + is PrimitiveType -> + `type`.convertedToNotNull().toKotlin() + is ArrayType -> + if (hasInit) + `type`.convertedToNotNull().toKotlin() + else + "arrayOfNulls<" + `type`.elementType.toKotlin() + ">" + else -> + "arrayOfNulls<" + `type`.elementType.toKotlin() + ">" + } + else + `type`.convertedToNotNull().toKotlin() + } } } diff --git a/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.jav b/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.jav new file mode 100644 index 00000000000..bf0219dc831 --- /dev/null +++ b/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.jav @@ -0,0 +1 @@ +int[] a = new int[10] \ No newline at end of file diff --git a/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.kt b/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.kt new file mode 100644 index 00000000000..f63facdd5a7 --- /dev/null +++ b/tests/testData/ast/arrayInitializerExpression/statement/intArrayWithLength.kt @@ -0,0 +1 @@ +var a : IntArray? = IntArray(10) \ No newline at end of file diff --git a/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.jav b/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.jav new file mode 100644 index 00000000000..04dedc06ddc --- /dev/null +++ b/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.jav @@ -0,0 +1 @@ +Object[] a = new Object[10] \ No newline at end of file diff --git a/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.kt b/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.kt new file mode 100644 index 00000000000..2b294296ee3 --- /dev/null +++ b/tests/testData/ast/arrayInitializerExpression/statement/objectArrayWithLength.kt @@ -0,0 +1 @@ +var a : Array? = arrayOfNulls(10) \ No newline at end of file diff --git a/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension.kt b/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension.kt index ea4fcc7e35e..a55da469576 100644 --- a/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension.kt +++ b/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension.kt @@ -1 +1 @@ -var d2 : Array? = Array(5) \ No newline at end of file +var d2 : Array? = arrayOfNulls(5) \ No newline at end of file diff --git a/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt b/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt index 95be479049e..76a8da1a13f 100644 --- a/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt +++ b/tests/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt @@ -1 +1 @@ -var d3 : Array?>? = Array?>(5, {Array(5)}) \ No newline at end of file +var d3 : Array?>? = Array?>(5, {arrayOfNulls(5)}) \ No newline at end of file diff --git a/tests/testData/ast/arrayType/statement/d2StringEmptyArray.kt b/tests/testData/ast/arrayType/statement/d2StringEmptyArray.kt index a4786c4ecb1..ada23e19294 100644 --- a/tests/testData/ast/arrayType/statement/d2StringEmptyArray.kt +++ b/tests/testData/ast/arrayType/statement/d2StringEmptyArray.kt @@ -1 +1 @@ -var ss : Array?>? = Array?>(5, {Array(5)}) \ No newline at end of file +var ss : Array?>? = Array?>(5, {arrayOfNulls(5)}) \ No newline at end of file diff --git a/tests/testData/ast/arrayType/statement/d3StringEmptyArray.kt b/tests/testData/ast/arrayType/statement/d3StringEmptyArray.kt index 7e3bd1cb471..2657bcc524c 100644 --- a/tests/testData/ast/arrayType/statement/d3StringEmptyArray.kt +++ b/tests/testData/ast/arrayType/statement/d3StringEmptyArray.kt @@ -1 +1 @@ -var sss : Array?>?>? = Array?>?>(5, {Array?>(5, {Array(5)})}) \ No newline at end of file +var sss : Array?>?>? = Array?>?>(5, {Array?>(5, {arrayOfNulls(5)})}) \ No newline at end of file