From 06e87927c245c8587c0c560af3ae31698e74bcc9 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Thu, 15 Dec 2011 12:48:06 +0400 Subject: [PATCH] arrays of any dimension are supported --- .../ArrayWithoutInitializationExpression.java | 35 ++++++++++--------- src/org/jetbrains/jet/j2k/util/AstUtil.java | 6 ++-- ...InitializationStatementWithDimension3d.jav | 1 + ...yInitializationStatementWithDimension3d.kt | 1 + ...alizationStatementWithDimensionExplicit.kt | 2 +- .../arrayType/statement/d2StringEmptyArray.kt | 2 +- .../statement/d3StringEmptyArray.jav | 1 + .../arrayType/statement/d3StringEmptyArray.kt | 1 + 8 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.jav create mode 100644 testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt create mode 100644 testData/ast/arrayType/statement/d3StringEmptyArray.jav create mode 100644 testData/ast/arrayType/statement/d3StringEmptyArray.kt diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.java b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.java index c4ddf5ac24b..045663abf7c 100644 --- a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.java @@ -20,33 +20,34 @@ public class ArrayWithoutInitializationExpression extends Expression { @NotNull @Override public String toKotlin() { - if (myType.getKind() == Kind.ARRAY_TYPE) { - if (myExpressions.size() == 1) - return oneDim(myType, myExpressions.get(0)); - if (myExpressions.size() == 2) { - Type innerType = ((ArrayType) myType).getInnerType(); - return oneDim(myType, myExpressions.get(0), "{" + SPACE + - oneDim(innerType, myExpressions.get(1)) + SPACE + "}"); - } - } + if (myType.getKind() == Kind.ARRAY_TYPE) + return constructInnerType((ArrayType) myType, myExpressions); return getConstructorName(myType); } - private static String oneDim(Type type, Expression size) { + @NotNull + private static String constructInnerType(@NotNull ArrayType hostType, @NotNull List expressions) { + if (expressions.size() == 1) + return oneDim(hostType, expressions.get(0)); + Type innerType = hostType.getInnerType(); + if (expressions.size() > 1 && innerType.getKind() == Kind.ARRAY_TYPE) + return oneDim(hostType, expressions.get(0), "{" + constructInnerType((ArrayType) innerType, expressions.subList(1, expressions.size())) + "}"); + return getConstructorName(hostType); + } + + @NotNull + private static String oneDim(@NotNull Type type, @NotNull Expression size) { return oneDim(type, size, EMPTY); } - private static String oneDim(Type type, Expression size, String init) { + @NotNull + private static String oneDim(@NotNull Type type, @NotNull Expression size, @NotNull String init) { String commaWithInit = init.isEmpty() ? EMPTY : COMMA_WITH_SPACE + init; return getConstructorName(type) + "(" + size.toKotlin() + commaWithInit + ")"; } - public static String getConstructorName(Type type) { -// if (type instanceof ArrayType) { -// String innerTypeStr = ((ArrayType) type).getInnerType().toKotlin().toLowerCase(); -// if (PRIMITIVE_TYPES.contains(innerTypeStr)) -// return innerTypeStr + "Array"; -// } + @NotNull + public static String getConstructorName(@NotNull Type type) { return AstUtil.replaceLastQuest(type.toKotlin()); } } diff --git a/src/org/jetbrains/jet/j2k/util/AstUtil.java b/src/org/jetbrains/jet/j2k/util/AstUtil.java index e9d114a7fd5..3f4718a8da5 100644 --- a/src/org/jetbrains/jet/j2k/util/AstUtil.java +++ b/src/org/jetbrains/jet/j2k/util/AstUtil.java @@ -82,13 +82,15 @@ public class AstUtil { return "(" + f + ")" + s; } - public static T getOrElse(@NotNull Map map, T e, T orElse) { + @NotNull + public static T getOrElse(@NotNull Map map, @NotNull T e, @NotNull T orElse) { if (map.containsKey(e)) return map.get(e); return orElse; } - public static String replaceLastQuest(String str) { + @NotNull + public static String replaceLastQuest(@NotNull String str) { if (str.endsWith("?")) return str.substring(0, str.length() - 1); return str; diff --git a/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.jav b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.jav new file mode 100644 index 00000000000..abe20f1ec57 --- /dev/null +++ b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.jav @@ -0,0 +1 @@ +int [][][] d3 = new int[5][5][]; \ No newline at end of file diff --git a/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt new file mode 100644 index 00000000000..95be479049e --- /dev/null +++ b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimension3d.kt @@ -0,0 +1 @@ +var d3 : Array?>? = Array?>(5, {Array(5)}) \ No newline at end of file diff --git a/testData/ast/arrayType/statement/arrayInitializationStatementWithDimensionExplicit.kt b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimensionExplicit.kt index bf59ae0d269..32ac4491c66 100644 --- a/testData/ast/arrayType/statement/arrayInitializationStatementWithDimensionExplicit.kt +++ b/testData/ast/arrayType/statement/arrayInitializationStatementWithDimensionExplicit.kt @@ -1 +1 @@ -var d2 : Array? = Array(5, { IntArray(5) }) \ No newline at end of file +var d2 : Array? = Array(5, {IntArray(5)}) \ No newline at end of file diff --git a/testData/ast/arrayType/statement/d2StringEmptyArray.kt b/testData/ast/arrayType/statement/d2StringEmptyArray.kt index f534425f354..a4786c4ecb1 100644 --- a/testData/ast/arrayType/statement/d2StringEmptyArray.kt +++ b/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, {Array(5)}) \ No newline at end of file diff --git a/testData/ast/arrayType/statement/d3StringEmptyArray.jav b/testData/ast/arrayType/statement/d3StringEmptyArray.jav new file mode 100644 index 00000000000..498743daff6 --- /dev/null +++ b/testData/ast/arrayType/statement/d3StringEmptyArray.jav @@ -0,0 +1 @@ +String [][][] sss = new String[5][5][5]; \ No newline at end of file diff --git a/testData/ast/arrayType/statement/d3StringEmptyArray.kt b/testData/ast/arrayType/statement/d3StringEmptyArray.kt new file mode 100644 index 00000000000..7e3bd1cb471 --- /dev/null +++ b/testData/ast/arrayType/statement/d3StringEmptyArray.kt @@ -0,0 +1 @@ +var sss : Array?>?>? = Array?>?>(5, {Array?>(5, {Array(5)})}) \ No newline at end of file