diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InitializerTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InitializerTest.java index 7d5b1724f74..11cc37c4d7c 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InitializerTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InitializerTest.java @@ -34,4 +34,8 @@ public class InitializerTest extends SingleFileTranslationTest { public void testClassInitializer() throws Exception { checkFooBoxIsOk(); } + + public void testDeclarationInitializedWithThrow() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java index 55e47dad042..686be239c20 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.general.Translation; import org.jetbrains.kotlin.js.translate.general.TranslatorVisitor; +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; import org.jetbrains.kotlin.psi.*; import java.util.List; @@ -46,8 +47,11 @@ public final class InitializerVisitor extends TranslatorVisitor { public final Void visitProperty(@NotNull KtProperty property, @NotNull TranslationContext context) { KtExpression initializer = property.getInitializer(); if (initializer != null) { - result.add(generateInitializerForProperty(context, getPropertyDescriptor(context.bindingContext(), property), - Translation.translateAsExpression(initializer, context))); + JsStatement statement = generateInitializerForProperty(context, getPropertyDescriptor(context.bindingContext(), property), + Translation.translateAsExpression(initializer, context)); + if (!JsAstUtils.isEmptyStatement(statement)) { + result.add(statement); + } } JsStatement delegate = generateInitializerForDelegate(context, property); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 326770a9026..eca02225fe7 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -175,7 +175,7 @@ public final class TranslationUtils { @NotNull PropertyDescriptor descriptor, @NotNull JsExpression assignTo) { JsNameRef backingFieldReference = backingFieldReference(context, descriptor); - return assignment(backingFieldReference, assignTo); + return !JsAstUtils.isEmptyExpression(assignTo) ? assignment(backingFieldReference, assignTo) : assignTo; } @Nullable diff --git a/js/js.translator/testData/initialize/cases/declarationInitializedWithThrow.kt b/js/js.translator/testData/initialize/cases/declarationInitializedWithThrow.kt new file mode 100644 index 00000000000..85fbee73cb9 --- /dev/null +++ b/js/js.translator/testData/initialize/cases/declarationInitializedWithThrow.kt @@ -0,0 +1,15 @@ +// See KT-12254 +package foo + +object A { + var x: Int = throw RuntimeException("catch me") +} + +fun box(): String { + try { + return "fail: ${A.x.toString()}" + } + catch (e: RuntimeException) { + return if (e.message == "catch me") "OK" else "fail: ${e.message}" + } +} \ No newline at end of file