diff --git a/translator/src/org/jetbrains/k2js/translate/BindingUtils.java b/translator/src/org/jetbrains/k2js/translate/BindingUtils.java index 0933e7f2c2e..8fb2688aea4 100644 --- a/translator/src/org/jetbrains/k2js/translate/BindingUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/BindingUtils.java @@ -101,6 +101,10 @@ public final class BindingUtils { return superClassDescriptors; } + static public boolean isStatement(@NotNull BindingContext context, @NotNull JetExpression expression) { + return context.get(BindingContext.STATEMENT, expression); + } + //TODO better implementation? private static boolean isNotAny(@NotNull DeclarationDescriptor superClassDescriptor) { return !superClassDescriptor.getName().equals("Any"); diff --git a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java index e5e25fada0d..c8d4c0a2179 100644 --- a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java @@ -2,7 +2,6 @@ package org.jetbrains.k2js.translate; import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; @@ -183,7 +182,8 @@ public final class ExpressionVisitor extends TranslatorVisitor { @Override @NotNull public JsNode visitIfExpression(@NotNull JetIfExpression expression, @NotNull TranslationContext context) { - if (isStatement(expression)) { + boolean isStatement = BindingUtils.isStatement(context.bindingContext(), expression); + if (isStatement) { return translateAsIfStatement(expression, context); } else { return translateAsConditionalExpression(expression, context); @@ -220,12 +220,6 @@ public final class ExpressionVisitor extends TranslatorVisitor { return result; } - //TODO: ask about a legal way to do it - private boolean isStatement(@NotNull JetIfExpression expression) { - PsiElement parent = expression.getParent(); - return (parent instanceof JetBlockExpression) || (parent instanceof JetIfExpression); - } - @NotNull private JsStatement translateNullableExpressionAsNotNullStatement(@Nullable JetExpression nullableExpression, @NotNull TranslationContext context) { diff --git a/translator/test/org/jetbrains/k2js/test/ExpressionTest.java b/translator/test/org/jetbrains/k2js/test/ExpressionTest.java index aa32dfe1ca5..000cfbb4823 100644 --- a/translator/test/org/jetbrains/k2js/test/ExpressionTest.java +++ b/translator/test/org/jetbrains/k2js/test/ExpressionTest.java @@ -41,11 +41,10 @@ public final class ExpressionTest extends TranslationTest { performTest("if.kt", "foo", "box", 5); } - //TODO: test fails because of problem with isStatement() -// @Test -// public void ifElseIf() throws Exception { -// performTest("elseif.kt", "foo", "box", 5); -// } + @Test + public void ifElseIf() throws Exception { + performTest("elseif.kt", "foo", "box", 5); + } @Test public void whileSimpleTest() throws Exception {