[K/JS] Fix nameBindings for ES-modules after the ES-modules external declarations optimization

This commit is contained in:
Artem Kobzar
2023-10-20 14:04:39 +00:00
committed by Space Team
parent 72438f4969
commit 4a042dafef
15 changed files with 84 additions and 1 deletions
@@ -90,6 +90,7 @@ class JsNameLinkingNamer(
else -> JsImport.Target.Default(nameRef)
}
imports[this] = JsImport(jsModule, importSubject)
nameMap[this] = name
} else {
importedModules += JsImportedModule(jsModule, name, nameRef)
}
@@ -97,7 +97,7 @@ private class JsIrAstSerializer {
}
fun append(fragment: JsIrProgramFragment): JsIrAstSerializer {
importedNames += fragment.imports.map { fragment.nameBindings[it.key]!! }
importedNames += fragment.imports.map { fragment.nameBindings[it.key] ?: error("No binding for tag ${it.key}") }
fragmentSerializer.writeFragment(fragment)
return this
}
@@ -325,6 +325,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -325,6 +325,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -325,6 +325,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -325,6 +325,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -325,6 +325,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -325,6 +325,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/");
}
@Test
@TestMetadata("jsModuleAnnotationOnObjectWithUsage")
public void testJsModuleAnnotationOnObjectWithUsage() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/");
}
@Test
@TestMetadata("languageVersionSettings")
public void testLanguageVersionSettings() throws Exception {
@@ -0,0 +1,3 @@
external object ObjectB {
fun getResult(): String
}
@@ -0,0 +1,5 @@
@JsNonModule
@JsModule("../third-party-lib.mjs")
external object ObjectB {
fun getResult(): String
}
@@ -0,0 +1,8 @@
STEP 0:
modifications:
U : ObjectB.0.kt -> ObjectB.kt
added file: ObjectB.kt
STEP 1:
modifications:
U : ObjectB.1.kt -> ObjectB.kt
modified ir: ObjectB.kt
@@ -0,0 +1,9 @@
@OptIn(kotlin.ExperimentalStdlibApi::class)
@EagerInitialization
val initJsObject = js("""
globalThis.ObjectB = { getResult: function() { return "OK" } }
""")
fun box(stepId: Int): String {
return ObjectB.getResult()
}
@@ -0,0 +1,6 @@
STEP 0:
dependencies: lib1
added file: m.kt
STEP 1:
dependencies: lib1
updated imports: m.kt
@@ -0,0 +1,12 @@
MODULES: lib1, main
MODULE_KIND: es
IGNORE_PER_MODULE: true
STEP 0:
libs: lib1, main
dirty js modules: lib1, main
dirty js files: lib1/ObjectB, main/m, main/m.export, main
STEP 1:
libs: lib1, main
dirty js modules: lib1, main
dirty js files: lib1/ObjectB, main/m
@@ -0,0 +1,3 @@
export function getResult() {
return "OK"
}