From 60eef335bf2b9906d5884642b22b71d3e4cfbc92 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 31 Oct 2011 15:40:32 +0400 Subject: [PATCH] LabelStatement added --- .../jetbrains/jet/j2k/ast/LabelStatement.java | 22 +++++++ .../jet/j2k/visitors/StatementVisitor.java | 4 ++ .../jet/j2k/ast/LabelStatementTest.java | 58 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 src/org/jetbrains/jet/j2k/ast/LabelStatement.java create mode 100644 test/org/jetbrains/jet/j2k/ast/LabelStatementTest.java diff --git a/src/org/jetbrains/jet/j2k/ast/LabelStatement.java b/src/org/jetbrains/jet/j2k/ast/LabelStatement.java new file mode 100644 index 00000000000..9908938b4d1 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/LabelStatement.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class LabelStatement extends Statement { + private final Identifier myName; + private final Statement myStatement; + + public LabelStatement(Identifier name, Statement statement) { + myName = name; + myStatement = statement; + } + + @NotNull + @Override + public String toKotlin() { + return AT + myName.toKotlin() + SPACE + myStatement.toKotlin(); + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index d5acdebd1f3..169d34e8810 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -141,6 +141,10 @@ public class StatementVisitor extends ElementVisitor implements Visitor { @Override public void visitLabeledStatement(PsiLabeledStatement statement) { super.visitLabeledStatement(statement); + myResult = new LabelStatement( + identifierToIdentifier(statement.getLabelIdentifier()), + statementToStatement(statement.getStatement()) + ); } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/LabelStatementTest.java b/test/org/jetbrains/jet/j2k/ast/LabelStatementTest.java new file mode 100644 index 00000000000..a6c0cc99468 --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/LabelStatementTest.java @@ -0,0 +1,58 @@ +package org.jetbrains.jet.j2k.ast; + +import junit.framework.Assert; +import org.jetbrains.jet.j2k.JetTestCaseBase; + +/** + * @author ignatov + */ +public class LabelStatementTest extends JetTestCaseBase { + public void testComplicatedExampleFromJavaTutorial() throws Exception { + Assert.assertEquals( + statementToKotlin( + " test:" + + " for (int i = 0; i <= max; i++) {" + + " int n = substring.length();" + + " int j = i;" + + " int k = 0;" + + " while (n-- != 0) {" + + " if (searchMe.charAt(j++) != substring.charAt(k++)) {" + + " continue test;" + + " }" + + " } " + + " foundIt = true;" + + " break test;" + + " }" + + " System.out.println(foundIt ? \"Found it\" : \"Didn't find it\");" + + " }" + + "}"), + "@test {\n" + + "var i : Int = 0\n" + + "while ((i <= max))\n" + + "{\n" + + "{\n" + + "var n : Int = substring.length()\n" + + "var j : Int = i\n" + + "var k : Int = 0\n" + + "while (((n--) != 0))\n" + + "{\n" + + "if ((searchMe.charAt((j++)) != substring.charAt((k++))))\n" + + "{\n" + + "continue@test\n" + + "}\n" + + "}\n" + + "foundIt = true\n" + + "break@test\n" + + "}\n" + + "{\n" + + "(i++)\n" + + "}\n" + + "}\n" + + "}\n" + + "System.out.println((if (foundIt)\n" + + "\"Found it\"\n" + + "else\n" + + "\"Didn't find it\"))" + ); + } +}