From 63a909dee614485184dadbed896c9648da723462 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Tue, 10 Mar 2020 23:31:53 +0300 Subject: [PATCH] JS: fix KT-37386 Anonymous object constructor parameters should not reuse JsName's of the super class. Otherwise the temporary name renamer gets confused. --- .../js/test/ir/semantics/IrBoxJsTestGenerated.java | 5 +++++ .../kotlin/js/test/semantics/BoxJsTestGenerated.java | 5 +++++ .../initializer/ClassInitializerTranslator.java | 7 ++----- .../testData/box/objectDeclaration/kt37386.kt | 11 +++++++++++ 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 js/js.translator/testData/box/objectDeclaration/kt37386.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java index b2bf94c96fa..6da7de2f944 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java @@ -6243,6 +6243,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/objectDeclaration/kt3684.kt"); } + @TestMetadata("kt37386.kt") + public void testKt37386() throws Exception { + runTest("js/js.translator/testData/box/objectDeclaration/kt37386.kt"); + } + @TestMetadata("lambdaInObjectInsideObject.kt") public void testLambdaInObjectInsideObject() throws Exception { runTest("js/js.translator/testData/box/objectDeclaration/lambdaInObjectInsideObject.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index e09ccad71f1..831094f7fc2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -6263,6 +6263,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { runTest("js/js.translator/testData/box/objectDeclaration/kt3684.kt"); } + @TestMetadata("kt37386.kt") + public void testKt37386() throws Exception { + runTest("js/js.translator/testData/box/objectDeclaration/kt37386.kt"); + } + @TestMetadata("lambdaInObjectInsideObject.kt") public void testLambdaInObjectInsideObject() throws Exception { runTest("js/js.translator/testData/box/objectDeclaration/lambdaInObjectInsideObject.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java index c032620c946..761e929c5eb 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java @@ -49,10 +49,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument; import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.*; import static org.jetbrains.kotlin.js.translate.utils.FunctionBodyTranslator.setDefaultValueForArguments; @@ -232,7 +229,7 @@ public final class ClassInitializerTranslator extends AbstractTranslator { } else { for (ValueParameterDescriptor parameter : superDescriptor.getValueParameters()) { - JsName parameterName = context.getNameForDescriptor(parameter); + JsName parameterName = JsScope.declareTemporaryName(parameter.getName().asString()); arguments.add(parameterName.makeRef()); initializer.getParameters().add(new JsParameter(parameterName)); } diff --git a/js/js.translator/testData/box/objectDeclaration/kt37386.kt b/js/js.translator/testData/box/objectDeclaration/kt37386.kt new file mode 100644 index 00000000000..7557c7bce44 --- /dev/null +++ b/js/js.translator/testData/box/objectDeclaration/kt37386.kt @@ -0,0 +1,11 @@ +// EXPECTED_REACHABLE_NODES: 1315 + +fun foo() = "OK" + +open class A(val foo: Boolean = true) { + val ok = foo() +} + +val q = object : A() {} + +fun box() = q.ok \ No newline at end of file