[JS IR] Use cacheable ZIP file system accessor in JS IR BE

Related to KT-51712
This commit is contained in:
Alexander Korepanov
2023-02-27 17:36:48 +01:00
committed by Space Team
parent 8f22d6d36e
commit 2cad26f4cc
9 changed files with 80 additions and 20 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrProgramFragment
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.library.KLIB_PROPERTY_DEPENDS
import org.jetbrains.kotlin.library.KotlinLibrary
@@ -87,7 +88,8 @@ class CacheUpdater(
// libraries in topological order: [stdlib, ..., main]
val libraryDependencies = stopwatch.measure("Resolving and loading klib dependencies") {
val allResolvedDependencies = CommonJsKLibResolver.resolve(allModules, compilerConfiguration.resolverLogger)
val zipAccessor = compilerConfiguration.get(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR)
val allResolvedDependencies = CommonJsKLibResolver.resolve(allModules, compilerConfiguration.resolverLogger, zipAccessor)
val libraries = allResolvedDependencies.getFullList(TopologicalLibraryOrder).let { resolvedLibraries ->
val mainLibraryIndex = resolvedLibraries.indexOfLast {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibraryProperResolverWithAttributes
import org.jetbrains.kotlin.library.UnresolvedLibrary
@@ -16,15 +17,21 @@ import org.jetbrains.kotlin.library.metadata.resolver.impl.libraryResolver
import org.jetbrains.kotlin.util.Logger
object CommonJsKLibResolver {
fun resolve(libraries: Collection<String>, logger: Logger): KotlinLibraryResolveResult =
fun resolve(
libraries: Collection<String>,
logger: Logger,
zipAccessor: ZipFileSystemAccessor? = null
): KotlinLibraryResolveResult =
resolveWithoutDependencies(
libraries,
logger
logger,
zipAccessor
).resolveWithDependencies()
fun resolveWithoutDependencies(
libraries: Collection<String>,
logger: Logger
logger: Logger,
zipAccessor: ZipFileSystemAccessor?
): KLibResolution {
val unresolvedLibraries = libraries.map { UnresolvedLibrary(it, null) }
val libraryAbsolutePaths = libraries.map { File(it).absolutePath }
@@ -35,7 +42,8 @@ object CommonJsKLibResolver {
distributionKlib = null,
localKotlinDir = null,
skipCurrentDir = false,
logger = logger
logger = logger,
zipAccessor = zipAccessor
).libraryResolver()
return KLibResolution(
@@ -67,7 +75,8 @@ private class KLibResolverHelper(
distributionKlib: String?,
localKotlinDir: String?,
skipCurrentDir: Boolean,
logger: Logger
logger: Logger,
private val zipAccessor: ZipFileSystemAccessor?
) : KotlinLibraryProperResolverWithAttributes<KotlinLibrary>(
repositories,
directLibs,
@@ -78,5 +87,5 @@ private class KLibResolverHelper(
emptyList()
) {
// Stick with the default KotlinLibrary for now.
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault)
}
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault, zipAccessor)
}
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor
import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.library.*
@@ -472,7 +473,8 @@ class ModulesStructure(
val allDependenciesResolution = CommonJsKLibResolver.resolveWithoutDependencies(
dependencies,
compilerConfiguration.resolverLogger
compilerConfiguration.resolverLogger,
compilerConfiguration.get(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR)
)
val fullResolvedLibraries by lazy {