diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index f96063b2495..55fe455bdfa 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -164,6 +164,8 @@ public class Converter { @NotNull public static Element elementToElement(PsiElement e) { + if (e == null) + return Element.EMPTY_ELEMENT; final ElementVisitor elementVisitor = new ElementVisitor(); e.accept(elementVisitor); System.out.println(e.getClass()); diff --git a/src/org/jetbrains/jet/j2k/ast/Element.java b/src/org/jetbrains/jet/j2k/ast/Element.java index 013d70f05b4..5675438b63b 100644 --- a/src/org/jetbrains/jet/j2k/ast/Element.java +++ b/src/org/jetbrains/jet/j2k/ast/Element.java @@ -1,7 +1,21 @@ package org.jetbrains.jet.j2k.ast; +import org.jetbrains.annotations.NotNull; + /** * @author ignatov */ public abstract class Element extends Node { + public static Element EMPTY_ELEMENT = new EmptyElement(); + + /** + * @author ignatov + */ + private static class EmptyElement extends Element { + @NotNull + @Override + public String toKotlin() { + return EMPTY; + } + } } diff --git a/src/org/jetbrains/jet/j2k/ast/EmptyElement.java b/src/org/jetbrains/jet/j2k/ast/EmptyElement.java deleted file mode 100644 index 2b68afe22f9..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/EmptyElement.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class EmptyElement extends Element { - @NotNull - @Override - public String toKotlin() { - return EMPTY; - } -} diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java index 51816c245a3..16918a38527 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java @@ -11,7 +11,7 @@ import static org.jetbrains.jet.j2k.Converter.*; * @author ignatov */ public class ElementVisitor extends JavaElementVisitor implements Visitor { - private Element myResult = new EmptyElement(); + private Element myResult = Element.EMPTY_ELEMENT; @NotNull @Override diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 5262efacdc8..13fc4e8a84c 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -6,6 +6,8 @@ import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.ast.*; +import java.util.List; + import static org.jetbrains.jet.j2k.Converter.*; /** @@ -171,13 +173,20 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { if (expression.getArrayInitializer() != null) // new Foo[] {} myResult = expressionToExpression(expression.getArrayInitializer()); - else { + else if (expression.getArrayDimensions().length > 0) { // new Foo[5] + final List callExpression = expressionsToExpressionList(expression.getArrayDimensions()); + callExpression.add(new IdentifierImpl("{null}")); // TODO: remove + + myResult = new NewClassExpression( + typeToType(expression.getType()), // TODO: remove + new ExpressionList(callExpression) + ); + } else { myResult = new NewClassExpression( elementToElement(expression.getClassOrAnonymousClassReference()), elementToElement(expression.getArgumentList()) ); } - } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/ArrayTypeTest.java b/test/org/jetbrains/jet/j2k/ast/ArrayTypeTest.java index eed80e25e26..04b50fe1dc9 100644 --- a/test/org/jetbrains/jet/j2k/ast/ArrayTypeTest.java +++ b/test/org/jetbrains/jet/j2k/ast/ArrayTypeTest.java @@ -41,4 +41,25 @@ public class ArrayTypeTest extends JetTestCaseBase { "fun fromArrayToCollection(a : Array?) : Unit { }" ); } + + public void testArrayInitializationStatement() throws Exception { + Assert.assertEquals( + statementToSingleLineKotlin("int [][] d2 = new int[][]{};"), + "var d2 : Array? = array()" // more precisely: "var d2 : Array? = array()" + ); + } + + public void testArrayInitializationStatementWithDimension() throws Exception { + Assert.assertEquals( + statementToSingleLineKotlin("int [][] d2 = new int[5][];"), + "var d2 : Array? = Array?(5, {null})" // another variant: "var d2 : Array? = array(5, {null, null, null, null, null})" + ); + } + +// public void testArrayInitializationStatementWithThreeDimension() throws Exception { +// Assert.assertEquals( +// statementToSingleLineKotlin("int[][][] d3= new int[5][5][5];"), +// "var d3 : Array?>? = Array?>?()" +// ); +// } }