for supported

This commit is contained in:
Sergey Ignatov
2011-10-31 13:25:57 +04:00
parent 25a23abf83
commit 4b2c8bc7af
4 changed files with 158 additions and 7 deletions
@@ -0,0 +1,23 @@
package org.jetbrains.jet.j2k.ast;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.util.AstUtil;
import java.util.List;
/**
* @author ignatov
*/
public class ExpressionListStatement extends Expression {
private List<Expression> myExpressions;
public ExpressionListStatement(List<Expression> expressions) {
myExpressions = expressions;
}
@NotNull
@Override
public String toKotlin() {
return AstUtil.joinNodes(myExpressions, N);
}
}
@@ -6,8 +6,7 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.ast.*;
import static org.jetbrains.jet.j2k.Converter.elementToElement;
import static org.jetbrains.jet.j2k.Converter.expressionToExpression;
import static org.jetbrains.jet.j2k.Converter.*;
/**
* @author ignatov
@@ -115,11 +114,6 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
super.visitConditionalExpression(expression);
}
@Override
public void visitExpressionListStatement(PsiExpressionListStatement statement) {
super.visitExpressionListStatement(statement);
}
@Override
public void visitExpressionStatement(PsiExpressionStatement statement) {
super.visitExpressionStatement(statement);
@@ -128,6 +122,8 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
@Override
public void visitExpressionList(PsiExpressionList list) {
super.visitExpressionList(list);
myResult =
new ExpressionList(expressionsToExpressionList(list.getExpressions()));
}
@Override
@@ -5,7 +5,12 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.Converter;
import org.jetbrains.jet.j2k.ast.*;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import static org.jetbrains.jet.j2k.Converter.expressionToExpression;
import static org.jetbrains.jet.j2k.Converter.expressionsToExpressionList;
import static org.jetbrains.jet.j2k.Converter.statementToStatement;
/**
@@ -74,11 +79,23 @@ public class StatementVisitor extends ElementVisitor implements Visitor {
@Override
public void visitExpressionListStatement(PsiExpressionListStatement statement) {
super.visitExpressionListStatement(statement);
myResult =
new ExpressionListStatement(expressionsToExpressionList(statement.getExpressionList().getExpressions()));
}
@Override
public void visitForStatement(PsiForStatement statement) {
super.visitForStatement(statement);
List<Statement> forStatements = new LinkedList<Statement>();
forStatements.add(statementToStatement(statement.getInitialization()));
forStatements.add(new WhileStatement(
expressionToExpression(statement.getCondition()),
new Block(
Arrays.asList(statementToStatement(statement.getBody()),
new Block(Arrays.asList(statementToStatement(statement.getUpdate())))))));
myResult = new Block(forStatements);
}
@Override
+115
View File
@@ -0,0 +1,115 @@
package org.jetbrains.jet.j2k.ast;
import junit.framework.Assert;
import org.jetbrains.jet.j2k.JetTestCaseBase;
/**
* @author ignatov
*/
public class ForTest extends JetTestCaseBase {
public void testCommonCaseForTest() throws Exception {
Assert.assertEquals(
statementToKotlin("for (init(); condition(); update()) body();"),
"{\n" +
"init()\n" +
"while (condition())\n" +
"{\n" +
"body()\n" +
"{\n" +
"update()\n" +
"}\n" +
"}\n" +
"}"
);
}
public void testForWithEmptyBlock() throws Exception {
Assert.assertEquals(
statementToKotlin("for (int i = 0; i < 0; j++, i++) {}"),
"{\n" +
"var i : Int = 0\n" +
"while ((i < 0))\n" +
"{\n" +
"{\n" +
"}\n" +
"{\n" +
"(j++)\n" +
"(i++)\n" +
"}\n" +
"}\n" +
"}"
);
}
public void testForWithBlock() throws Exception {
Assert.assertEquals(
statementToKotlin("for (int i = 0; i < 0; i++) {int i = 1; i++;}"),
"{\n" +
"var i : Int = 0\n" +
"while ((i < 0))\n" +
"{\n" +
"{\n" +
"var i : Int = 1\n" +
"(i++)\n" +
"}\n" +
"{\n" +
"(i++)\n" +
"}\n" +
"}\n" +
"}"
);
}
public void testForWithBlockAndDoubleUpdate() throws Exception {
Assert.assertEquals(
statementToKotlin("for (int i = 0; i < 0; j++, i++) {int i = 1; i++;}"),
"{\n" +
"var i : Int = 0\n" +
"while ((i < 0))\n" +
"{\n" +
"{\n" +
"var i : Int = 1\n" +
"(i++)\n" +
"}\n" +
"{\n" +
"(j++)\n" +
"(i++)\n" +
"}\n" +
"}\n" +
"}"
);
}
public void testForWithReturn() throws Exception {
Assert.assertEquals(
statementToKotlin("for (int i = 0; i < 0; j++, i++) return i;"),
"{\n" +
"var i : Int = 0\n" +
"while ((i < 0))\n" +
"{\n" +
"return i\n" +
"{\n" +
"(j++)\n" +
"(i++)\n" +
"}\n" +
"}\n" +
"}"
);
}
public void testForWithExpression() throws Exception {
Assert.assertEquals(
statementToKotlin("for (int i = 0; i < 0; i++) t++;"),
"{\n" +
"var i : Int = 0\n" +
"while ((i < 0))\n" +
"{\n" +
"(t++)\n" +
"{\n" +
"(i++)\n" +
"}\n" +
"}\n" +
"}"
);
}
}