[JS IR] Use cacheable ZIP file system accessor in JS IR BE
Related to KT-51712
This commit is contained in:
committed by
Space Team
parent
8f22d6d36e
commit
2cad26f4cc
@@ -4,6 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":kotlin-util-io"))
|
||||
api(project(":compiler:util"))
|
||||
api(project(":compiler:frontend"))
|
||||
api(project(":core:compiler.common.js"))
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.js.config;
|
||||
|
||||
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor;
|
||||
import org.jetbrains.kotlin.config.CompilerConfigurationKey;
|
||||
import org.jetbrains.kotlin.incremental.js.IncrementalNextRoundChecker;
|
||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider;
|
||||
@@ -120,4 +121,8 @@ public class JSConfigurationKeys {
|
||||
|
||||
public static final CompilerConfigurationKey<Boolean> WASM_GENERATE_WAT =
|
||||
CompilerConfigurationKey.create("generate wat file");
|
||||
|
||||
public static final CompilerConfigurationKey<ZipFileSystemAccessor> ZIP_FILE_SYSTEM_ACCESSOR =
|
||||
CompilerConfigurationKey.create("zip file system accessor, used for klib reading");
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.test.converters.ClassicJsBackendFacade
|
||||
import org.jetbrains.kotlin.js.test.utils.MODULE_EMULATION_FILE
|
||||
import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker
|
||||
import org.jetbrains.kotlin.konan.file.ZipFileSystemCacheableAccessor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
@@ -61,10 +62,17 @@ abstract class AbstractInvalidationTest(
|
||||
private const val SOURCE_MAPPING_URL_PREFIX = "//# sourceMappingURL="
|
||||
}
|
||||
|
||||
private val zipAccessor = ZipFileSystemCacheableAccessor(2)
|
||||
|
||||
override fun createEnvironment(): KotlinCoreEnvironment {
|
||||
return KotlinCoreEnvironment.createForTests(TestDisposable(), CompilerConfiguration(), EnvironmentConfigFiles.JS_CONFIG_FILES)
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
zipAccessor.reset()
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
private fun parseProjectInfo(testName: String, infoFile: File): ProjectInfo {
|
||||
return ProjectInfoParser(infoFile).parse(testName)
|
||||
}
|
||||
@@ -127,6 +135,9 @@ abstract class AbstractInvalidationTest(
|
||||
}
|
||||
build()
|
||||
}
|
||||
|
||||
zipAccessor.reset()
|
||||
copy.put(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR, zipAccessor)
|
||||
return copy
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker
|
||||
import org.jetbrains.kotlin.klib.KlibABITestUtils
|
||||
import org.jetbrains.kotlin.klib.KlibABITestUtils.MAIN_MODULE_NAME
|
||||
import org.jetbrains.kotlin.konan.file.ZipFileSystemCacheableAccessor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
@@ -54,6 +55,8 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
private lateinit var buildDir: File
|
||||
private lateinit var environment: KotlinCoreEnvironment
|
||||
|
||||
private val zipAccessor = ZipFileSystemCacheableAccessor(2)
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
buildDir = createTempDirectory().toFile().also { it.mkdirs() }
|
||||
@@ -66,10 +69,24 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
zipAccessor.reset()
|
||||
buildDir.deleteRecursively()
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
private fun createConfig(moduleName: String): CompilerConfiguration {
|
||||
val config = environment.configuration.copy()
|
||||
config.put(CommonConfigurationKeys.MODULE_NAME, moduleName)
|
||||
config.put(JSConfigurationKeys.PARTIAL_LINKAGE, true)
|
||||
config.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
|
||||
config.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true)
|
||||
|
||||
zipAccessor.reset()
|
||||
config.put(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR, zipAccessor)
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
private inner class JsTestConfiguration(testPath: String) : KlibABITestUtils.TestConfiguration {
|
||||
override val testDir: File = File(testPath).absoluteFile
|
||||
override val buildDir: File get() = this@AbstractJsKLibABITestCase.buildDir
|
||||
@@ -82,6 +99,7 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
this@AbstractJsKLibABITestCase.buildBinaryAndRun(mainModuleKlibFile, dependencies)
|
||||
|
||||
override fun onNonEmptyBuildDirectory(directory: File) {
|
||||
zipAccessor.reset()
|
||||
directory.listFiles()?.forEach(File::deleteRecursively)
|
||||
}
|
||||
|
||||
@@ -108,11 +126,9 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
fun doTest(testPath: String) = KlibABITestUtils.runTest(JsTestConfiguration(testPath))
|
||||
|
||||
private fun buildKlib(moduleName: String, moduleSourceDir: File, dependencies: KlibABITestUtils.Dependencies, klibFile: File) {
|
||||
val config = createConfig(moduleName)
|
||||
val ktFiles = environment.createPsiFiles(moduleSourceDir)
|
||||
|
||||
val config = environment.configuration.copy()
|
||||
config.put(CommonConfigurationKeys.MODULE_NAME, moduleName)
|
||||
|
||||
val sourceModule = prepareAnalyzedSourceModule(
|
||||
environment.project,
|
||||
ktFiles,
|
||||
@@ -156,12 +172,7 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
}
|
||||
|
||||
private fun buildBinaryAndRun(mainModuleKlibFile: File, allDependencies: KlibABITestUtils.Dependencies) {
|
||||
val configuration = environment.configuration.copy()
|
||||
|
||||
configuration.put(JSConfigurationKeys.PARTIAL_LINKAGE, true)
|
||||
configuration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
|
||||
configuration.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true)
|
||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, MAIN_MODULE_NAME)
|
||||
val configuration = createConfig(MAIN_MODULE_NAME)
|
||||
|
||||
val compilationOutputs = if (useIncrementalCompiler)
|
||||
buildBinaryWithIC(configuration, mainModuleKlibFile, allDependencies)
|
||||
|
||||
+4
-2
@@ -50,7 +50,9 @@ abstract class AbstractJsKlibBinaryCompatibilityTest : AbstractKlibBinaryCompati
|
||||
return uniqueDependencies
|
||||
}
|
||||
|
||||
private val TestModule.jsPath get() = File(workingDir, "${this.name}.js").absolutePath
|
||||
private val jsOutDir get() = workingDir.resolve("out")
|
||||
|
||||
private val TestModule.jsPath get() = File(jsOutDir, "${this.name}.js").absolutePath
|
||||
|
||||
private fun createFiles(files: List<TestFile>): List<String> =
|
||||
files.map {
|
||||
@@ -83,7 +85,7 @@ abstract class AbstractJsKlibBinaryCompatibilityTest : AbstractKlibBinaryCompati
|
||||
val args = K2JSCompilerArguments().apply {
|
||||
freeArgs = createFiles(module.files) + runnerFunctionFile()
|
||||
libraries = module.dependenciesToLibrariesArg(version = 2)
|
||||
outputDir = workingDir.normalize().absolutePath
|
||||
outputDir = jsOutDir.normalize().absolutePath
|
||||
moduleName = module.name
|
||||
irProduceJs = true
|
||||
irOnly = true
|
||||
|
||||
Reference in New Issue
Block a user