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 {
|
public void testClassInitializer() throws Exception {
|
||||||
checkFooBoxIsOk();
|
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.context.TranslationContext;
|
||||||
import org.jetbrains.kotlin.js.translate.general.Translation;
|
import org.jetbrains.kotlin.js.translate.general.Translation;
|
||||||
import org.jetbrains.kotlin.js.translate.general.TranslatorVisitor;
|
import org.jetbrains.kotlin.js.translate.general.TranslatorVisitor;
|
||||||
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
|
|
||||||
import java.util.List;
|
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) {
|
public final Void visitProperty(@NotNull KtProperty property, @NotNull TranslationContext context) {
|
||||||
KtExpression initializer = property.getInitializer();
|
KtExpression initializer = property.getInitializer();
|
||||||
if (initializer != null) {
|
if (initializer != null) {
|
||||||
result.add(generateInitializerForProperty(context, getPropertyDescriptor(context.bindingContext(), property),
|
JsStatement statement = generateInitializerForProperty(context, getPropertyDescriptor(context.bindingContext(), property),
|
||||||
Translation.translateAsExpression(initializer, context)));
|
Translation.translateAsExpression(initializer, context));
|
||||||
|
if (!JsAstUtils.isEmptyStatement(statement)) {
|
||||||
|
result.add(statement);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JsStatement delegate = generateInitializerForDelegate(context, property);
|
JsStatement delegate = generateInitializerForDelegate(context, property);
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ public final class TranslationUtils {
|
|||||||
@NotNull PropertyDescriptor descriptor,
|
@NotNull PropertyDescriptor descriptor,
|
||||||
@NotNull JsExpression assignTo) {
|
@NotNull JsExpression assignTo) {
|
||||||
JsNameRef backingFieldReference = backingFieldReference(context, descriptor);
|
JsNameRef backingFieldReference = backingFieldReference(context, descriptor);
|
||||||
return assignment(backingFieldReference, assignTo);
|
return !JsAstUtils.isEmptyExpression(assignTo) ? assignment(backingFieldReference, assignTo) : assignTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@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