From aacf51bd47024421f856a4bd01ba45322456b7fa Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 31 Oct 2011 12:26:21 +0400 Subject: [PATCH] WhileStatement added --- .../jetbrains/jet/j2k/ast/WhileStatement.java | 23 +++++++++++ .../jet/j2k/visitors/StatementVisitor.java | 17 +++++--- .../jet/j2k/ast/WhileStatementTest.java | 41 +++++++++++++++++++ 3 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 src/org/jetbrains/jet/j2k/ast/WhileStatement.java create mode 100644 test/org/jetbrains/jet/j2k/ast/WhileStatementTest.java diff --git a/src/org/jetbrains/jet/j2k/ast/WhileStatement.java b/src/org/jetbrains/jet/j2k/ast/WhileStatement.java new file mode 100644 index 00000000000..8502370c5a1 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/WhileStatement.java @@ -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(); + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 7ab7a9e70ff..4329d53bfe7 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -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()) ); } } diff --git a/test/org/jetbrains/jet/j2k/ast/WhileStatementTest.java b/test/org/jetbrains/jet/j2k/ast/WhileStatementTest.java new file mode 100644 index 00000000000..838efc36cb3 --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/WhileStatementTest.java @@ -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)" + ); + } +}