From 6dd7edd7685d16eeb61ce71741d82700cfa92efe Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 31 Oct 2011 16:00:11 +0400 Subject: [PATCH] SynchronizedStatement added --- src/org/jetbrains/jet/j2k/Converter.java | 7 +++++- .../jet/j2k/ast/SynchronizedStatement.java | 22 +++++++++++++++++++ .../jet/j2k/visitors/StatementVisitor.java | 4 ++++ .../j2k/ast/SynchronizedStatementTest.java | 16 ++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/org/jetbrains/jet/j2k/ast/SynchronizedStatement.java create mode 100644 test/org/jetbrains/jet/j2k/ast/SynchronizedStatementTest.java diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 898bd78a75b..61814d8d93e 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -105,12 +105,17 @@ public class Converter { } @NotNull - public static Block blockToBlock(PsiCodeBlock block, boolean notEmpty) { + public static Block blockToBlock(@Nullable PsiCodeBlock block, boolean notEmpty) { if (block == null) return Block.EMPTY_BLOCK; return new Block(statementsToStatementList(block.getStatements()), notEmpty); } + @NotNull + public static Block blockToBlock(@Nullable PsiCodeBlock block) { + return blockToBlock(block, true); + } + @NotNull public static List statementsToStatementList(PsiStatement[] statements) { List result = new LinkedList(); diff --git a/src/org/jetbrains/jet/j2k/ast/SynchronizedStatement.java b/src/org/jetbrains/jet/j2k/ast/SynchronizedStatement.java new file mode 100644 index 00000000000..63d3150b957 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/SynchronizedStatement.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.j2k.ast; + +import org.jetbrains.annotations.NotNull; + +/** + * @author ignatov + */ +public class SynchronizedStatement extends Statement { + private final Expression myExpression; + private final Block myBlock; + + public SynchronizedStatement(Expression expression, Block block) { + myExpression = expression; + myBlock = block; + } + + @NotNull + @Override + public String toKotlin() { + return "synchronized" + SPACE + "(" + myExpression.toKotlin() + ")" + SPACE + myBlock.toKotlin(); + } +} diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 169d34e8810..2a5a6454d67 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -165,6 +165,10 @@ public class StatementVisitor extends ElementVisitor implements Visitor { @Override public void visitSynchronizedStatement(PsiSynchronizedStatement statement) { super.visitSynchronizedStatement(statement); + myResult = new SynchronizedStatement( + expressionToExpression(statement.getLockExpression()), + blockToBlock(statement.getBody()) + ); } @Override diff --git a/test/org/jetbrains/jet/j2k/ast/SynchronizedStatementTest.java b/test/org/jetbrains/jet/j2k/ast/SynchronizedStatementTest.java new file mode 100644 index 00000000000..2d353b8af23 --- /dev/null +++ b/test/org/jetbrains/jet/j2k/ast/SynchronizedStatementTest.java @@ -0,0 +1,16 @@ +package org.jetbrains.jet.j2k.ast; + +import junit.framework.Assert; +import org.jetbrains.jet.j2k.JetTestCaseBase; + +/** + * @author ignatov + */ +public class SynchronizedStatementTest extends JetTestCaseBase { + public void testSingleLineExample() throws Exception { + Assert.assertEquals( + statementToSingleLineKotlin("synchronized (s) { doSomething(s); }"), + "synchronized (s) { doSomething(s) }" + ); + } +}