diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/invalidation.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/invalidation.kt index 11a868bfd26..49769454f0d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/invalidation.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/invalidation.kt @@ -150,6 +150,7 @@ private fun KotlinLibrary.filesAndSigReaders(): List, cleanInlineHashes: Map, @@ -195,6 +196,7 @@ private fun buildCacheForModule( // TODO: actual way of building a cache could change in future cacheConsumer.buildForFile(irFile) } + cacheConsumer.commitLibraryPath(libraryPath) } private fun loadModules( @@ -407,6 +409,14 @@ private fun actualizeCacheForModule( val deserializers = dirtySet.associateWith { currentModuleDeserializer.signatureDeserializerForFile(it).signatureToIndexMapping() } - buildCacheForModule(currentIrModule, dirtySet, sigHashes, persistentCacheConsumer, deserializers, fileFingerPrints) + buildCacheForModule( + library.libraryFile.canonicalPath, + currentIrModule, + dirtySet, + sigHashes, + persistentCacheConsumer, + deserializers, + fileFingerPrints + ) return false // invalidated and re-built } \ No newline at end of file diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt index 81f5ac2e4f6..66aa116045c 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt @@ -132,12 +132,12 @@ class PersistentCacheProviderImpl(private val cachePath: String) : PersistentCac override fun allInlineHashes(sigResolver: (String, Int) -> IdSignature): Map { val result = mutableMapOf() val cachePath = File(cachePath) - cachePath.listFiles { file: File -> file.isDirectory }!!.forEach { - val fileInfo = File(it, fileInfoFile) + cachePath.listFiles { file: File -> file.isDirectory }!!.forEach { f -> + val fileInfo = File(f, fileInfoFile) if (fileInfo.exists()) { val fileName = fileInfo.readLines()[0] - parseHashList(it, inlineFunctionsFile) { id -> sigResolver(fileName, id) }.forEach { - result[it.first] = it.second + parseHashList(f, inlineFunctionsFile) { id -> sigResolver(fileName, id) }.forEach { (sig, hash) -> + result[sig] = hash } } } @@ -161,6 +161,8 @@ interface PersistentCacheConsumer { fun commitBinaryAst(path: String, astData: ByteArray) fun invalidateForFile(path: String) + fun commitLibraryPath(libraryPath: String) + companion object { val EMPTY = object : PersistentCacheConsumer { override fun commitInlineFunctions( @@ -190,6 +192,10 @@ interface PersistentCacheConsumer { } + override fun commitLibraryPath(libraryPath: String) { + + } + } } } @@ -265,4 +271,17 @@ class PersistentCacheConsumerImpl(private val cachePath: String) : PersistentCac astFile.createNewFile() astFile.writeBytes(astData) } + + override fun commitLibraryPath(libraryPath: String) { + val infoFile = File(File(cachePath), "info") + if (infoFile.exists()) { + infoFile.delete() + } + infoFile.createNewFile() + + PrintWriter(infoFile).use { + it.println(libraryPath) + it.println("0") + } + } }