array creation supported more correctly

This commit is contained in:
Sergey Ignatov
2011-11-02 15:33:45 +04:00
parent a54d55e5df
commit a0339c8c34
6 changed files with 49 additions and 17 deletions
+2
View File
@@ -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());
@@ -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;
}
}
}
@@ -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;
}
}
@@ -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
@@ -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<Expression> 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
@@ -41,4 +41,25 @@ public class ArrayTypeTest extends JetTestCaseBase {
"fun fromArrayToCollection(a : Array<Foo?>?) : Unit { }"
);
}
public void testArrayInitializationStatement() throws Exception {
Assert.assertEquals(
statementToSingleLineKotlin("int [][] d2 = new int[][]{};"),
"var d2 : Array<IntArray?>? = array()" // more precisely: "var d2 : Array<IntArray?>? = array<IntArray?>()"
);
}
public void testArrayInitializationStatementWithDimension() throws Exception {
Assert.assertEquals(
statementToSingleLineKotlin("int [][] d2 = new int[5][];"),
"var d2 : Array<IntArray?>? = Array<IntArray?>?(5, {null})" // another variant: "var d2 : Array<IntArray?>? = 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<IntArray?>?>? = Array<Array<IntArray?>?>?()"
// );
// }
}