[K/JS] Fix reexport with CommonJS and incremental compilation
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@ class JsExecutableProducer(
|
||||
fun buildExecutable(granularity: JsGenerationGranularity, outJsProgram: Boolean) =
|
||||
when (granularity) {
|
||||
JsGenerationGranularity.WHOLE_PROGRAM -> buildSingleModuleExecutable(outJsProgram)
|
||||
JsGenerationGranularity.PER_MODULE -> buildMultiArtifactExecutable(outJsProgram, JsPerModuleCache(caches))
|
||||
JsGenerationGranularity.PER_MODULE -> buildMultiArtifactExecutable(outJsProgram, JsPerModuleCache(moduleKind, caches))
|
||||
JsGenerationGranularity.PER_FILE -> buildMultiArtifactExecutable(outJsProgram, JsPerFileCache(caches))
|
||||
}
|
||||
|
||||
|
||||
+13
-2
@@ -6,9 +6,13 @@
|
||||
package org.jetbrains.kotlin.ir.backend.js.ic
|
||||
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.*
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
import java.io.File
|
||||
|
||||
class JsPerModuleCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMultiArtifactCache<JsPerModuleCache.CachedModuleInfo>() {
|
||||
class JsPerModuleCache(
|
||||
private val moduleKind: ModuleKind,
|
||||
private val moduleArtifacts: List<ModuleArtifact>
|
||||
) : JsMultiArtifactCache<JsPerModuleCache.CachedModuleInfo>() {
|
||||
companion object {
|
||||
private const val JS_MODULE_HEADER = "js.module.header.bin"
|
||||
private const val CACHED_MODULE_JS = "module.js"
|
||||
@@ -73,8 +77,15 @@ class JsPerModuleCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMu
|
||||
} ?: compilationOutputs
|
||||
|
||||
override fun loadProgramHeadersFromCache(): List<CachedModuleInfo> {
|
||||
val mainModule = moduleArtifacts.last()
|
||||
return moduleArtifacts.map { artifact ->
|
||||
fun loadModuleInfo() = CachedModuleInfo(artifact, artifact.loadJsIrModule().makeModuleHeader())
|
||||
fun loadModuleInfo() = CachedModuleInfo(
|
||||
artifact,
|
||||
artifact
|
||||
.loadJsIrModule(mainModule.moduleSafeName.takeIf { moduleKind !== ModuleKind.ES && artifact !== mainModule })
|
||||
.makeModuleHeader()
|
||||
)
|
||||
|
||||
val actualInfo = when {
|
||||
artifact.forceRebuildJs -> loadModuleInfo()
|
||||
artifact.fileArtifacts.any { it.isModified() } -> loadModuleInfo()
|
||||
|
||||
@@ -32,11 +32,11 @@ class ModuleArtifact(
|
||||
val moduleSafeName = moduleName.safeModuleName
|
||||
val moduleExternalName = externalModuleName ?: moduleSafeName
|
||||
|
||||
fun loadJsIrModule(): JsIrModule {
|
||||
fun loadJsIrModule(reexportedInModuleWithName: String? = null): JsIrModule {
|
||||
val fragments = fileArtifacts.sortedBy { it.srcFilePath }.flatMap {
|
||||
val fragments = it.loadJsIrFragments()
|
||||
listOfNotNull(fragments?.mainFragment, fragments?.exportFragment)
|
||||
}
|
||||
return JsIrModule(moduleSafeName, moduleExternalName, fragments)
|
||||
return JsIrModule(moduleSafeName, moduleExternalName, fragments, reexportedInModuleWithName)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user