WhileStatement added

This commit is contained in:
Sergey Ignatov
2011-10-31 12:26:21 +04:00
parent ba856a974b
commit aacf51bd47
3 changed files with 76 additions and 5 deletions
@@ -0,0 +1,23 @@
package org.jetbrains.jet.j2k.ast;
import org.jetbrains.annotations.NotNull;
/**
* @author ignatov
*/
public class WhileStatement extends Statement {
final Expression myCondition;
final Statement myStatement;
public WhileStatement(Expression condition, Statement statement) {
myCondition = condition;
myStatement = statement;
}
@NotNull
@Override
public String toKotlin() {
return "while" + SPACE + "(" + myCondition.toKotlin() + ")" + N +
myStatement.toKotlin();
}
}
@@ -5,6 +5,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.j2k.Converter;
import org.jetbrains.jet.j2k.ast.*;
import static org.jetbrains.jet.j2k.Converter.expressionToExpression;
import static org.jetbrains.jet.j2k.Converter.statementToStatement;
/**
* @author ignatov
*/
@@ -61,7 +64,7 @@ public class StatementVisitor extends ElementVisitor implements Visitor {
@Override
public void visitExpressionStatement(PsiExpressionStatement statement) {
super.visitExpressionStatement(statement);
myResult = Converter.expressionToExpression(statement.getExpression());
myResult = expressionToExpression(statement.getExpression());
}
@Override
@@ -88,9 +91,9 @@ public class StatementVisitor extends ElementVisitor implements Visitor {
public void visitIfStatement(PsiIfStatement statement) {
super.visitIfStatement(statement);
myResult = new IfStatement(
Converter.expressionToExpression(statement.getCondition()),
Converter.statementToStatement(statement.getThenBranch()),
Converter.statementToStatement(statement.getElseBranch())
expressionToExpression(statement.getCondition()),
statementToStatement(statement.getThenBranch()),
statementToStatement(statement.getElseBranch())
);
}
@@ -137,6 +140,10 @@ public class StatementVisitor extends ElementVisitor implements Visitor {
@Override
public void visitWhileStatement(PsiWhileStatement statement) {
super.visitWhileStatement(statement);
myResult = new WhileStatement(
expressionToExpression(statement.getCondition()),
statementToStatement(statement.getBody())
);
}
@Override
@@ -144,7 +151,7 @@ public class StatementVisitor extends ElementVisitor implements Visitor {
super.visitReturnStatement(statement);
myResult = new ReturnStatement(
Converter.expressionToExpression(statement.getReturnValue())
expressionToExpression(statement.getReturnValue())
);
}
}
@@ -0,0 +1,41 @@
package org.jetbrains.jet.j2k.ast;
import junit.framework.Assert;
import org.jetbrains.jet.j2k.JetTestCaseBase;
/**
* @author ignatov
*/
public class WhileStatementTest extends JetTestCaseBase {
public void testWhileWithEmptyBlock() throws Exception {
Assert.assertEquals(
statementToKotlin("while (true) {}"),
"while (true)\n{\n}"
);
}
public void testWhileWithBlock() throws Exception {
Assert.assertEquals(
statementToKotlin("while (a > b) {int i = 1; i = i + 1;}"),
"while ((a > b))\n" +
"{\n" +
"var i : Int = 1\n" +
"i = (i + 1)\n" +
"}"
);
}
public void testWhileWithReturn() throws Exception {
Assert.assertEquals(
statementToKotlin("while (true) return 1;"),
"while (true)\nreturn 1"
);
}
public void testWhileWithExpression() throws Exception {
Assert.assertEquals(
statementToKotlin("while (true) i = i + 1;"),
"while (true)\ni = (i + 1)"
);
}
}