diff --git a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java index cfa1c136fe7..b0de57c306f 100644 --- a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java @@ -3,6 +3,7 @@ package org.jetbrains.k2js.translate; import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; import java.util.ArrayList; @@ -105,13 +106,35 @@ public class WhenTranslator extends AbstractTranslator { //TODO: ask what these conditions mean @NotNull private JsExpression translateConditions(@NotNull JetWhenEntry entry) { - JetWhenCondition[] conditions = entry.getConditions(); -// for (JetWhenCondition condition : conditions) { -// translateCondition(condition); -// } - return translateCondition(conditions[0]); + List conditions = new ArrayList(); + for (JetWhenCondition condition : entry.getConditions()) { + conditions.add(translateCondition(condition)); + } + return anyOfThemIsTrue(conditions); } + @NotNull + private JsExpression anyOfThemIsTrue(List conditions) { + assert !conditions.isEmpty() : "When entry (not else) should have at least one condition"; + JsExpression current = null; + for (JsExpression condition : conditions) { + current = addCaseCondition(current, condition); + } + assert current != null; + return current; + } + + @NotNull + private JsExpression addCaseCondition(@Nullable JsExpression current, @NotNull JsExpression condition) { + if (current == null) { + current = condition; + } else { + current = new JsBinaryOperation(JsBinaryOperator.OR, current, condition); + } + return current; + } + + @NotNull private JsExpression translateCondition(@NotNull JetWhenCondition condition) { if (condition instanceof JetWhenConditionIsPattern) { diff --git a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java index a1031833734..74d0996ba70 100644 --- a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java +++ b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java @@ -46,7 +46,7 @@ public final class PatternMatchingTest extends IncludeLibraryTest { @Test public void multipleCases() throws Exception { - testFooBoxIsTrue("multipleCases.kt"); + testFunctionOutput("multipleCases.kt", "foo", "box", 2.0); } } diff --git a/translator/testFiles/patternMatching/cases/multipleCases.kt b/translator/testFiles/patternMatching/cases/multipleCases.kt index 9b6ef9a3bda..b75ebe8d8d3 100644 --- a/translator/testFiles/patternMatching/cases/multipleCases.kt +++ b/translator/testFiles/patternMatching/cases/multipleCases.kt @@ -1,6 +1,6 @@ namespace foo -fun box() : Boolean { +fun box() : Int { val c = 3 val d = 5 var z = 0 @@ -13,5 +13,5 @@ fun box() : Boolean { is 5, is 3 => z++; else => z = -1000; } - return c == 2 + return z } \ No newline at end of file