diff --git a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java index 382c31f4fe6..d96c738341d 100644 --- a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java @@ -379,10 +379,11 @@ public final class ExpressionVisitor extends TranslatorVisitor { public JsNode visitSafeQualifiedExpression(@NotNull JetSafeQualifiedExpression expression, @NotNull TranslationContext context) { JsExpression receiver = translateReceiver(expression, context); + JsNullLiteral nullLiteral = context.program().getNullLiteral(); JsBinaryOperation nullCheck = new JsBinaryOperation - (JsBinaryOperator.NEQ, receiver, context.program().getNullLiteral()); - JsStatement thenStatement = AstUtil.convertToStatement(translateQualifiedExpression(expression, context)); - return new JsIf(nullCheck, thenStatement, null); + (JsBinaryOperator.NEQ, receiver, nullLiteral); + JsExpression thenExpression = AstUtil.convertToExpression(translateQualifiedExpression(expression, context)); + return new JsConditional(nullCheck, thenExpression, nullLiteral); } diff --git a/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java b/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java index 1d604d9411d..0d5a7f4d7e7 100644 --- a/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java +++ b/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java @@ -44,6 +44,11 @@ public final class PropertyAccessorTest extends AbstractClassTest { testFooBoxIsTrue("safeCall.kt"); } + @Test + public void safeCallReturnsNullIfFails() throws Exception { + testFooBoxIsTrue("safeCallReturnsNullIfFails.kt"); + } + //TODO test // @Test // public void namespaceCustomAccessors() throws Exception { diff --git a/translator/testFiles/propertyAccess/cases/safeCallReturnsNullIfFails.kt b/translator/testFiles/propertyAccess/cases/safeCallReturnsNullIfFails.kt new file mode 100644 index 00000000000..b5d44bb29bb --- /dev/null +++ b/translator/testFiles/propertyAccess/cases/safeCallReturnsNullIfFails.kt @@ -0,0 +1,10 @@ +namespace foo + +class A() { + val x = 4 +} + +fun box() : Boolean { + var a : A? = null; + return (a?.x == null); +} \ No newline at end of file