[K/JS] Add serialization/deserialization for JsImport/JsExport nodes
This commit is contained in:
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
|
||||
import org.jetbrains.kotlin.ir.backend.js.ic.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.jsPhases
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.CompilationOutputs
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.extension
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.safeModuleName
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
@@ -58,8 +59,6 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
|
||||
private val TEST_FILE_IGNORE_PATTERN = Regex("^.*\\..+\\.\\w\\w$")
|
||||
|
||||
private val JS_MODULE_KIND = ModuleKind.COMMON_JS
|
||||
|
||||
private const val SOURCE_MAPPING_URL_PREFIX = "//# sourceMappingURL="
|
||||
}
|
||||
|
||||
@@ -114,11 +113,11 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
return File(File(buildDir, moduleName), "$moduleName.klib")
|
||||
}
|
||||
|
||||
private fun createConfiguration(moduleName: String, language: List<String>): CompilerConfiguration {
|
||||
private fun createConfiguration(moduleName: String, language: List<String>, moduleKind: ModuleKind): CompilerConfiguration {
|
||||
val copy = environment.configuration.copy()
|
||||
copy.put(CommonConfigurationKeys.MODULE_NAME, moduleName)
|
||||
copy.put(JSConfigurationKeys.GENERATE_DTS, true)
|
||||
copy.put(JSConfigurationKeys.MODULE_KIND, JS_MODULE_KIND)
|
||||
copy.put(JSConfigurationKeys.MODULE_KIND, moduleKind)
|
||||
copy.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true)
|
||||
copy.put(JSConfigurationKeys.SOURCE_MAP, true)
|
||||
|
||||
@@ -185,7 +184,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
friends += klibFile
|
||||
}
|
||||
}
|
||||
val configuration = createConfiguration(module, projStep.language)
|
||||
val configuration = createConfiguration(module, projStep.language, projectInfo.moduleKind)
|
||||
outputKlibFile.delete()
|
||||
buildKlib(configuration, module, moduleSourceDir, dependencies, friends, outputKlibFile)
|
||||
}
|
||||
@@ -241,7 +240,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
}
|
||||
|
||||
private fun File.writeAsJsModule(jsCode: String, moduleName: String) {
|
||||
writeText(ClassicJsBackendFacade.wrapWithModuleEmulationMarkers(jsCode, JS_MODULE_KIND, moduleName))
|
||||
writeText(ClassicJsBackendFacade.wrapWithModuleEmulationMarkers(jsCode, projectInfo.moduleKind, moduleName))
|
||||
}
|
||||
|
||||
private fun prepareExternalJsFiles(): MutableList<String> {
|
||||
@@ -258,12 +257,13 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
try {
|
||||
V8IrJsTestChecker.checkWithTestFunctionArgs(
|
||||
files = jsFiles,
|
||||
testModuleName = "./$mainModuleName.js",
|
||||
testModuleName = "./$mainModuleName${projectInfo.moduleKind.extension}",
|
||||
testPackageName = null,
|
||||
testFunctionName = BOX_FUNCTION_NAME,
|
||||
testFunctionArgs = "$stepId",
|
||||
expectedResult = "OK",
|
||||
withModuleSystem = true
|
||||
entryModulePath = jsFiles.last(),
|
||||
withModuleSystem = projectInfo.moduleKind in setOf(ModuleKind.COMMON_JS, ModuleKind.UMD, ModuleKind.AMD)
|
||||
)
|
||||
} catch (e: ComparisonFailure) {
|
||||
throw ComparisonFailure("Mismatched box out at step $stepId", e.expected, e.actual)
|
||||
@@ -301,8 +301,8 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
}
|
||||
|
||||
private fun writeJsCode(stepId: Int, mainModuleName: String, jsOutput: CompilationOutputs): List<String> {
|
||||
val compiledJsFiles = jsOutput.writeAll(jsDir, mainModuleName, true, mainModuleName, JS_MODULE_KIND).filter {
|
||||
it.extension == "js"
|
||||
val compiledJsFiles = jsOutput.writeAll(jsDir, mainModuleName, true, mainModuleName, projectInfo.moduleKind).filter {
|
||||
it.extension == "js" || it.extension == "mjs"
|
||||
}
|
||||
for (jsCodeFile in compiledJsFiles) {
|
||||
val sourceMappingUrlLine = jsCodeFile.readLines().singleOrNull { it.startsWith(SOURCE_MAPPING_URL_PREFIX) }
|
||||
@@ -325,7 +325,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend
|
||||
error("module ${it.moduleName} has friends, but only main module may have the friends")
|
||||
}
|
||||
|
||||
val configuration = createConfiguration(projStep.order.last(), projStep.language)
|
||||
val configuration = createConfiguration(projStep.order.last(), projStep.language, projectInfo.moduleKind)
|
||||
val cacheUpdater = CacheUpdater(
|
||||
mainModule = mainModuleInfo.modulePath,
|
||||
allModules = testInfo.mapTo(mutableListOf(STDLIB_KLIB)) { it.modulePath },
|
||||
|
||||
@@ -79,9 +79,10 @@ abstract class AbstractJsTestChecker {
|
||||
testFunctionName: String,
|
||||
testFunctionArgs: String,
|
||||
expectedResult: String,
|
||||
withModuleSystem: Boolean
|
||||
withModuleSystem: Boolean,
|
||||
entryModulePath: String? = null
|
||||
) {
|
||||
val actualResult = run(files, testModuleName, testPackageName, testFunctionName, testFunctionArgs, withModuleSystem)
|
||||
val actualResult = run(files, testModuleName, testPackageName, testFunctionName, testFunctionArgs, withModuleSystem, entryModulePath)
|
||||
Assert.assertEquals(expectedResult, actualResult.normalize())
|
||||
}
|
||||
|
||||
|
||||
Generated
+6
@@ -115,6 +115,12 @@ public class JsFirInvalidationTestGenerated extends AbstractJsFirInvalidationTes
|
||||
runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("esModules")
|
||||
public void testEsModules() throws Exception {
|
||||
runTest("js/js.translator/testData/incremental/invalidation/esModules/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("exceptionsFromInlineFunction")
|
||||
public void testExceptionsFromInlineFunction() throws Exception {
|
||||
|
||||
Generated
+6
@@ -115,6 +115,12 @@ public class JsIrES6InvalidationTestGenerated extends AbstractJsIrES6Invalidatio
|
||||
runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("esModules")
|
||||
public void testEsModules() throws Exception {
|
||||
runTest("js/js.translator/testData/incremental/invalidation/esModules/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("exceptionsFromInlineFunction")
|
||||
public void testExceptionsFromInlineFunction() throws Exception {
|
||||
|
||||
+6
@@ -115,6 +115,12 @@ public class JsIrInvalidationTestGenerated extends AbstractJsIrInvalidationTest
|
||||
runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("esModules")
|
||||
public void testEsModules() throws Exception {
|
||||
runTest("js/js.translator/testData/incremental/invalidation/esModules/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("exceptionsFromInlineFunction")
|
||||
public void testExceptionsFromInlineFunction() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user