[K/JS, K/Wasm] Generate star imports for external objects with the @JsModule annotation for ES modules

This commit is contained in:
Artem Kobzar
2023-07-18 15:36:19 +00:00
committed by Space Team
parent e61a11f0a3
commit 41f27d19b5
5 changed files with 58 additions and 42 deletions
@@ -11,10 +11,7 @@ import org.jetbrains.kotlin.ir.backend.js.utils.*
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
import org.jetbrains.kotlin.ir.util.isEffectivelyExternal
import org.jetbrains.kotlin.ir.util.isSimpleProperty
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.js.backend.ast.*
import org.jetbrains.kotlin.utils.DFS
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -85,11 +82,16 @@ class JsNameLinkingNamer(
parent.child(getJsNameOrKotlinName()).asString()
}
val name = JsName(sanitizeName(nameString), true)
val nameRef = name.makeRef()
if (isEsModules) {
imports[this] = JsImport(jsModule, JsImport.Target.Default(name.makeRef()))
val importSubject = when {
this is IrClass && isObject -> JsImport.Target.All(nameRef)
else -> JsImport.Target.Default(nameRef)
}
imports[this] = JsImport(jsModule, importSubject)
} else {
importedModules += JsImportedModule(jsModule, name, name.makeRef())
importedModules += JsImportedModule(jsModule, name, nameRef)
}
return name
}