From 849190130765f1380ef93756f3e33e782930e51c Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 31 Oct 2011 16:44:21 +0400 Subject: [PATCH] AssertStatement added --- src/org/jetbrains/jet/j2k/Converter.java | 2 +- .../jet/j2k/ast/AssertStatement.java | 23 ++++++++++++++ .../jet/j2k/ast/EmptyExpression.java | 14 --------- src/org/jetbrains/jet/j2k/ast/Expression.java | 14 +++++++++ .../jet/j2k/visitors/ExpressionVisitor.java | 2 +- .../jet/j2k/visitors/StatementVisitor.java | 5 ++++ .../jet/j2k/ast/AssertStatementTest.java | 30 +++++++++++++++++++ 7 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 src/org/jetbrains/jet/j2k/ast/AssertStatement.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/EmptyExpression.java create mode 100644 test/org/jetbrains/jet/j2k/ast/AssertStatementTest.java diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 61814d8d93e..5b1050c5084 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -147,7 +147,7 @@ public class Converter { @NotNull public static Expression expressionToExpression(@Nullable PsiExpression e) { if (e == null) - return new EmptyExpression(); + return Expression.EMPTY_EXPRESSION; final ExpressionVisitor expressionVisitor = new ExpressionVisitor(); e.accept(expressionVisitor); System.out.println(e.getClass()); diff --git a/src/org/jetbrains/jet/j2k/ast/AssertStatement.java b/src/org/jetbrains/jet/j2k/ast/AssertStatement.java new file mode 100644 index 00000000000..829f7953948 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/AssertStatement.java @@ -0,0 +1,23 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class AssertStatement extends Statement { + private final Expression myCondition; + private final Expression myDetail; + + public AssertStatement(Expression condition, Expression detail) { + myCondition = condition; + myDetail = detail; + } + + @NotNull + @Override + public String toKotlin() { + String detail = myDetail != Expression.EMPTY_EXPRESSION ? "(" + myDetail.toKotlin() + ")" : EMPTY; + return "assert" + detail + SPACE + "{" + myCondition.toKotlin() + "}"; + } +} diff --git a/src/org/jetbrains/jet/j2k/ast/EmptyExpression.java b/src/org/jetbrains/jet/j2k/ast/EmptyExpression.java deleted file mode 100644 index c2ed1f7cb27..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/EmptyExpression.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class EmptyExpression extends Expression { - @NotNull - @Override - public String toKotlin() { - return EMPTY; - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/Expression.java b/src/org/jetbrains/jet/j2k/ast/Expression.java index e83a07becd0..a18e4322dfd 100644 --- a/src/org/jetbrains/jet/j2k/ast/Expression.java +++ b/src/org/jetbrains/jet/j2k/ast/Expression.java @@ -1,7 +1,21 @@ package org.jetbrains.jet.j2k.ast; +import org.jetbrains.annotations.NotNull; + /** * @author ignatov */ public abstract class Expression extends Statement { + public static final Expression EMPTY_EXPRESSION = new EmptyExpression(); + + /** + * @author ignatov + */ + private static class EmptyExpression extends Expression { + @NotNull + @Override + public String toKotlin() { + return EMPTY; + } + } } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 41c3d03a3e3..eca574af9e8 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -12,7 +12,7 @@ import static org.jetbrains.jet.j2k.Converter.*; * @author ignatov */ public class ExpressionVisitor extends StatementVisitor implements Visitor { - private Expression myResult = new EmptyExpression(); + private Expression myResult = Expression.EMPTY_EXPRESSION; @NotNull public Expression getResult() { diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 2a5a6454d67..56ca0ee5f93 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -25,6 +25,11 @@ public class StatementVisitor extends ElementVisitor implements Visitor { @Override public void visitAssertStatement(PsiAssertStatement statement) { super.visitAssertStatement(statement); + + myResult = new AssertStatement( + expressionToExpression(statement.getAssertCondition()), + expressionToExpression(statement.getAssertDescription()) + ); } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/AssertStatementTest.java b/test/org/jetbrains/jet/j2k/ast/AssertStatementTest.java new file mode 100644 index 00000000000..9e397c9cba2 --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/AssertStatementTest.java @@ -0,0 +1,30 @@ +package org.jetbrains.jet.j2k.ast; + +import junit.framework.Assert; +import org.jetbrains.jet.j2k.JetTestCaseBase; + +/** + * @author ignatov + */ +public class AssertStatementTest extends JetTestCaseBase { + public void testOnlyCondition() throws Exception { + Assert.assertEquals( + statementToKotlin("assert boolMethod();"), + "assert {boolMethod()}" + ); + } + + public void testOnlyConditionWithBraces() throws Exception { + Assert.assertEquals( + statementToKotlin("assert(boolMethod());"), + "assert {(boolMethod())}" + ); + } + + public void testWithStringDetail() throws Exception { + Assert.assertEquals( + statementToKotlin("assert true : \"string details\";"), + "assert(\"string details\") {true}" + ); + } +}