[JS IR] Avoid name clashes for @JsQualifier-annotated declarations
#KT-42039 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
681ff2dcec
commit
2f07589b42
+4
-9
@@ -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
|
||||
|
||||
Generated
+5
@@ -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");
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
var chopchop = {
|
||||
foo: {
|
||||
ok: function () {
|
||||
return 'OK';
|
||||
},
|
||||
}
|
||||
};
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user