diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/StableNamesCollector.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/StableNamesCollector.kt index f263a3a69a5..1a721cabff3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/StableNamesCollector.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/StableNamesCollector.kt @@ -6,13 +6,8 @@ package org.jetbrains.kotlin.ir.backend.js.utils import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.IrConstructor -import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName -import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.util.isEffectivelyExternal -import org.jetbrains.kotlin.ir.util.isPropertyAccessor -import org.jetbrains.kotlin.ir.util.isPropertyField +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.utils.addIfNotNull @@ -76,14 +71,14 @@ class StableNamesCollector : IrElementVisitorVoid { val importedFromModuleOnly = declaration.isImportedFromModuleOnly() val jsName = declaration.getJsName() - val jsQualifier = declaration.getJsQualifier() + val jsQualifier = declaration.fileOrNull?.getJsQualifier() return when { importedFromModuleOnly -> null jsQualifier != null -> - jsQualifier.split('1')[0] + jsQualifier.substringBefore('.') jsName != null -> jsName diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java index d62cd1a9d5f..5a3eb51a815 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java @@ -6061,6 +6061,11 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test { runTest("js/js.translator/testData/box/nameClashes/jsNameAndPrivate.kt"); } + @TestMetadata("jsQualifier.kt") + public void testJsQualifier() throws Exception { + runTest("js/js.translator/testData/box/nameClashes/jsQualifier.kt"); + } + @TestMetadata("localFunctionInLambda.kt") public void testLocalFunctionInLambda() throws Exception { runTest("js/js.translator/testData/box/nameClashes/localFunctionInLambda.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java index 0e142f243fd..c74724a2fc1 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java @@ -6061,6 +6061,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/nameClashes/jsNameAndPrivate.kt"); } + @TestMetadata("jsQualifier.kt") + public void testJsQualifier() throws Exception { + runTest("js/js.translator/testData/box/nameClashes/jsQualifier.kt"); + } + @TestMetadata("localFunctionInLambda.kt") public void testLocalFunctionInLambda() throws Exception { runTest("js/js.translator/testData/box/nameClashes/localFunctionInLambda.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 24becf9bf84..df581b5ad26 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -6071,6 +6071,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { runTest("js/js.translator/testData/box/nameClashes/jsNameAndPrivate.kt"); } + @TestMetadata("jsQualifier.kt") + public void testJsQualifier() throws Exception { + runTest("js/js.translator/testData/box/nameClashes/jsQualifier.kt"); + } + @TestMetadata("localFunctionInLambda.kt") public void testLocalFunctionInLambda() throws Exception { runTest("js/js.translator/testData/box/nameClashes/localFunctionInLambda.kt"); diff --git a/js/js.translator/testData/box/nameClashes/jsQualifier.js b/js/js.translator/testData/box/nameClashes/jsQualifier.js new file mode 100644 index 00000000000..4a845034c06 --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/jsQualifier.js @@ -0,0 +1,7 @@ +var chopchop = { + foo: { + ok: function () { + return 'OK'; + }, + } +}; \ No newline at end of file diff --git a/js/js.translator/testData/box/nameClashes/jsQualifier.kt b/js/js.translator/testData/box/nameClashes/jsQualifier.kt new file mode 100644 index 00000000000..164c56af4ea --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/jsQualifier.kt @@ -0,0 +1,16 @@ +// MODULE: lib +// FILE: lib.kt +@file:JsQualifier("chopchop.foo") + +external fun ok(): String + +// MODULE: lib2 +// FILE: lib2.kt + +@JsExport +fun chopchop() {} + +// MODULE: main(lib, lib2) +// FILE: main.kt + +fun box() = ok()