diff --git a/src/org/jetbrains/jet/j2k/ast/DoWhileStatement.java b/src/org/jetbrains/jet/j2k/ast/DoWhileStatement.java new file mode 100644 index 00000000000..02d4f64d58d --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/DoWhileStatement.java @@ -0,0 +1,20 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class DoWhileStatement extends WhileStatement { + public DoWhileStatement(Expression condition, Statement statement) { + super(condition, statement); + } + + @NotNull + @Override + public String toKotlin() { + return "do" + N + + myStatement.toKotlin() + N + + "while" + SPACE + "(" + myCondition.toKotlin() + ")"; + } +} \ No newline at end of file diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 4329d53bfe7..1fc918f746b 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -54,6 +54,10 @@ public class StatementVisitor extends ElementVisitor implements Visitor { @Override public void visitDoWhileStatement(PsiDoWhileStatement statement) { super.visitDoWhileStatement(statement); + myResult = new DoWhileStatement( + expressionToExpression(statement.getCondition()), + statementToStatement(statement.getBody()) + ); } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/DoWhileStatementTest.java b/test/org/jetbrains/jet/j2k/ast/DoWhileStatementTest.java new file mode 100644 index 00000000000..a3ab333cda0 --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/DoWhileStatementTest.java @@ -0,0 +1,45 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.jet.j2k.JetTestCaseBase; +import org.junit.Assert; + +/** + * @author ignatov + */ +public class DoWhileStatementTest extends JetTestCaseBase { + public void testWhileWithEmptyBlock() throws Exception { + Assert.assertEquals( + statementToKotlin("do {} while (true)"), + "do\n" + + "{\n" + + "}\n" + + "while (true)" + ); + } + + public void testWhileWithBlock() throws Exception { + Assert.assertEquals( + statementToKotlin("do {int i = 1; i = i + 1;} while (a > b)"), + "do\n" + + "{\n" + + "var i : Int = 1\n" + + "i = (i + 1)\n" + + "}\n" + + "while ((a > b))" + ); + } + + public void testWhileWithReturn() throws Exception { + Assert.assertEquals( + statementToKotlin("do return 1; while (true)"), + "do\nreturn 1\nwhile (true)" + ); + } + + public void testWhileWithExpression() throws Exception { + Assert.assertEquals( + statementToKotlin("do i = i + 1; while (true)"), + "do\ni = (i + 1)\nwhile (true)" + ); + } +}