[JS KLIB IC] Implement incremental cache for IR

This commit is contained in:
Roman Artemev
2019-08-23 14:27:08 +03:00
committed by romanart
parent 7840cf70f0
commit 3753b75609
10 changed files with 145 additions and 5 deletions
@@ -31,11 +31,14 @@ interface IncrementalDataProvider {
/** gets non-dirty package metadata from previous compilation */
val packageMetadata: Map<String, ByteArray>
val serializedIrFiles: Map<File, IrTranslationResultValue>
}
class IncrementalDataProviderImpl(
override val headerMetadata: ByteArray,
override val compiledPackageParts: Map<File, TranslationResultValue>,
override val metadataVersion: IntArray,
override val packageMetadata: Map<String, ByteArray>
override val packageMetadata: Map<String, ByteArray>,
override val serializedIrFiles: Map<File, IrTranslationResultValue>
) : IncrementalDataProvider
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.incremental.js
import org.jetbrains.kotlin.name.FqName
import java.io.File
import java.io.Serializable
import java.security.MessageDigest
@@ -42,6 +41,17 @@ interface IncrementalResultsConsumer {
fun processInlineFunctions(functions: Collection<JsInlineFunctionHash>)
fun processPackageMetadata(packageName: String, metadata: ByteArray)
fun processIrFile(
sourceFile: File,
fileData: ByteArray,
symbols: ByteArray,
types: ByteArray,
strings: ByteArray,
declarations: ByteArray,
bodies: ByteArray,
fqn: ByteArray
)
}
class JsInlineFunctionHash(val sourceFilePath: String, val fqName: String, val inlineFunctionMd5Hash: Long): Serializable
@@ -108,6 +118,24 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
override fun processPackageMetadata(packageName: String, metadata: ByteArray) {
_packageMetadata[packageName] = metadata
}
// class IrFileData(fileData: ByteArray, symbols: ByteArray, types: ByteArray, strings: ByteArray, bodies: ByteArray, declarations: ByteArray)
private val _irFileData = hashMapOf<File, IrTranslationResultValue>()
val irFileData: Map<File, IrTranslationResultValue>
get() = _irFileData
override fun processIrFile(
sourceFile: File,
fileData: ByteArray,
symbols: ByteArray,
types: ByteArray,
strings: ByteArray,
declarations: ByteArray,
bodies: ByteArray,
fqn: ByteArray
) {
_irFileData[sourceFile] = IrTranslationResultValue(fileData, symbols, types, strings, declarations, bodies, fqn)
}
}
private fun ByteArray.md5(): Long {
@@ -18,3 +18,13 @@ package org.jetbrains.kotlin.incremental.js
data class TranslationResultValue(val metadata: ByteArray, val binaryAst: ByteArray, val inlineData: ByteArray)
data class IrTranslationResultValue(
val fileData: ByteArray,
val symbols: ByteArray,
val types: ByteArray,
val strings: ByteArray,
val declarations: ByteArray,
val bodies: ByteArray,
val fqn: ByteArray
)