From 98bcfe78476d115e75572afc47994db536f92f78 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Thu, 17 Nov 2011 18:05:47 +0400 Subject: [PATCH] Fixed a bug where multiple when entries could execute in one statement. --- .../jetbrains/k2js/translate/WhenTranslator.java | 7 ++++++- .../jetbrains/k2js/test/PatternMatchingTest.java | 5 +++++ .../patternMatching/cases/whenExecutesOnlyOnce.kt | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 translator/testFiles/patternMatching/cases/whenExecutesOnlyOnce.kt diff --git a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java index 86777d87df2..ae42bb5e031 100644 --- a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java @@ -91,7 +91,7 @@ public class WhenTranslator extends AbstractTranslator { return statementToExecute; } JsExpression condition = translateConditions(entry); - return new JsIf(condition, statementToExecute, null); + return new JsIf(condition, addDummyBreak(statementToExecute), null); } @NotNull @@ -119,6 +119,11 @@ public class WhenTranslator extends AbstractTranslator { throw new AssertionError("Unsupported when condition " + condition.getClass()); } + @NotNull + private JsBlock addDummyBreak(@NotNull JsStatement statement) { + return AstUtil.newBlock(statement, new JsBreak()); + } + @NotNull private JsExpression translatePatternCondition(@NotNull JetWhenConditionIsPattern condition) { diff --git a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java index 2973f6999f7..a6406f84b7a 100644 --- a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java +++ b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java @@ -24,4 +24,9 @@ public final class PatternMatchingTest extends IncludeLibraryTest { testFooBoxIsTrue("whenNotType.kt"); } + @Test + public void whenExecutesOnlyOnce() throws Exception { + testFooBoxIsTrue("whenExecutesOnlyOnce.kt"); + } + } diff --git a/translator/testFiles/patternMatching/cases/whenExecutesOnlyOnce.kt b/translator/testFiles/patternMatching/cases/whenExecutesOnlyOnce.kt new file mode 100644 index 00000000000..3ba142f334c --- /dev/null +++ b/translator/testFiles/patternMatching/cases/whenExecutesOnlyOnce.kt @@ -0,0 +1,15 @@ +namespace foo + +class A() { + +} + +fun box() : Boolean { + var a = 0 + when(A()) { + is A => a++; + is A => a++; + else => a++; + } + return (a == 1) +} \ No newline at end of file