KT-12254 Prevent JsEmptyExpression from getting into initializer JS when compiling code like val x = throw Exception()
This commit is contained in:
@@ -34,4 +34,8 @@ public class InitializerTest extends SingleFileTranslationTest {
|
||||
public void testClassInitializer() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testDeclarationInitializedWithThrow() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -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<Void> {
|
||||
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);
|
||||
|
||||
@@ -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
|
||||
|
||||
+15
@@ -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}"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user