FIR: Add IncrementalPackagePartsProvider usage in cli...

also refactor IncrementalPackagePartsProvider and parents to simplify
usage
This commit is contained in:
Ilya Chernikov
2021-02-02 10:34:14 +01:00
parent f8d50d585d
commit 3e458a1efb
10 changed files with 85 additions and 37 deletions
@@ -24,16 +24,21 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.deserialization.ClassData
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.storage.StorageManager
class IncrementalPackagePartProvider(
private val parent: PackagePartProvider,
incrementalCaches: List<IncrementalCache>,
storageManager: StorageManager
incrementalCaches: List<IncrementalCache>
) : PackagePartProvider {
lateinit var deserializationConfiguration: DeserializationConfiguration
private val moduleMappings = storageManager.createLazyValue {
init {
(parent as? JvmPackagePartProviderBase<*>)?.deserializationConfiguration?.let {
deserializationConfiguration = it
}
}
private val moduleMappings by lazy {
incrementalCaches.map { cache ->
ModuleMapping.loadModuleMapping(cache.getModuleMappingData(), "<incremental>", deserializationConfiguration) { version ->
// Incremental compilation should fall back to full rebuild if the minor component of the metadata version has changed
@@ -43,7 +48,7 @@ class IncrementalPackagePartProvider(
}
override fun findPackageParts(packageFqName: String): List<String> {
return (moduleMappings().mapNotNull { it.findPackageParts(packageFqName) }.flatMap { it.parts } +
return (moduleMappings.mapNotNull { it.findPackageParts(packageFqName) }.flatMap { it.parts } +
parent.findPackageParts(packageFqName)).distinct()
}
@@ -52,6 +57,6 @@ class IncrementalPackagePartProvider(
}
override fun getAllOptionalAnnotationClasses(): List<ClassData> =
moduleMappings().flatMap((JvmPackagePartProviderBase)::getAllOptionalAnnotationClasses) +
moduleMappings.flatMap((JvmPackagePartProviderBase)::getAllOptionalAnnotationClasses) +
parent.getAllOptionalAnnotationClasses()
}