JS: cache metadata, grouped by package FQN

This commit is contained in:
Anton Bannykh
2019-04-12 20:54:49 +03:00
parent c1f69ca8d6
commit c3170d1908
13 changed files with 214 additions and 45 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.incremental.js
import org.jetbrains.kotlin.name.FqName
import java.io.File
// byte arrays are used to simplify passing to different classloaders
@@ -27,10 +28,14 @@ interface IncrementalDataProvider {
val compiledPackageParts: Map<File, TranslationResultValue>
val metadataVersion: IntArray
/** gets non-dirty package metadata from previous compilation */
val packageMetadata: Map<String, ByteArray>
}
class IncrementalDataProviderImpl(
override val headerMetadata: ByteArray,
override val compiledPackageParts: Map<File, TranslationResultValue>,
override val metadataVersion: IntArray
override val metadataVersion: IntArray,
override val packageMetadata: Map<String, ByteArray>
) : IncrementalDataProvider
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.incremental.js
import org.jetbrains.kotlin.name.FqName
import java.io.File
import java.io.Serializable
import java.security.MessageDigest
@@ -39,6 +40,8 @@ interface IncrementalResultsConsumer {
* Used in daemon RPC.
*/
fun processInlineFunctions(functions: Collection<JsInlineFunctionHash>)
fun processPackageMetadata(packageName: String, metadata: ByteArray)
}
class JsInlineFunctionHash(val sourceFilePath: String, val fqName: String, val inlineFunctionMd5Hash: Long): Serializable
@@ -97,6 +100,14 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
val mapForSource = _deferInlineFuncs.getOrPut(sourceFile) { hashMapOf() }
mapForSource[fqName] = FunctionWithSourceInfo(inlineFunction, line, column)
}
private val _packageMetadata = hashMapOf<String, ByteArray>()
val packageMetadata: Map<String, ByteArray>
get() = _packageMetadata
override fun processPackageMetadata(packageName: String, metadata: ByteArray) {
_packageMetadata[packageName] = metadata
}
}
private fun ByteArray.md5(): Long {