[JS IR] Minor IC refactoring

Move metadata classes from cache updater to separate file.
This commit is contained in:
Alexander Korepanov
2022-11-15 21:46:30 +01:00
committed by Space Team
parent 0f4e4ac20e
commit c7589245c4
2 changed files with 49 additions and 49 deletions
@@ -111,55 +111,6 @@ class CacheUpdater(
return result
}
private class DirtyFileExports(
override val inverseDependencies: KotlinSourceFileMutableMap<Set<IdSignature>> = KotlinSourceFileMutableMap()
) : KotlinSourceFileExports() {
override fun getExportedSignatures(): Set<IdSignature> = allExportedSignatures
val allExportedSignatures = hashSetOf<IdSignature>()
}
private class DirtyFileMetadata(
val maybeImportedSignatures: Collection<IdSignature>,
val oldDirectDependencies: KotlinSourceFileMap<*>,
override val inverseDependencies: KotlinSourceFileMutableMap<MutableSet<IdSignature>> = KotlinSourceFileMutableMap(),
override val directDependencies: KotlinSourceFileMutableMap<MutableMap<IdSignature, ICHash>> = KotlinSourceFileMutableMap(),
) : KotlinSourceFileMetadata() {
fun addInverseDependency(lib: KotlinLibraryFile, src: KotlinSourceFile, signature: IdSignature) =
when (val signatures = inverseDependencies[lib, src]) {
null -> inverseDependencies[lib, src] = hashSetOf(signature)
else -> signatures += signature
}
fun addDirectDependency(lib: KotlinLibraryFile, src: KotlinSourceFile, signature: IdSignature, hash: ICHash) =
when (val signatures = directDependencies[lib, src]) {
null -> directDependencies[lib, src] = hashMapOf(signature to hash)
else -> signatures[signature] = hash
}
}
private class UpdatedDependenciesMetadata(oldMetadata: KotlinSourceFileMetadata) : KotlinSourceFileMetadata() {
private val oldInverseDependencies = oldMetadata.inverseDependencies
private val newExportedSignatures: Set<IdSignature> by lazy { inverseDependencies.flatSignatures() }
var importedSignaturesModified = false
override val inverseDependencies = oldMetadata.inverseDependencies.toMutable()
override val directDependencies = oldMetadata.directDependencies.toMutable()
override fun getExportedSignatures(): Set<IdSignature> = newExportedSignatures
fun isExportedSignaturesUpdated() = newExportedSignatures != oldInverseDependencies.flatSignatures()
}
private fun KotlinSourceFileMutableMap<UpdatedDependenciesMetadata>.addNewMetadata(
libFile: KotlinLibraryFile, srcFile: KotlinSourceFile, oldMetadata: KotlinSourceFileMetadata
) = this[libFile, srcFile] ?: UpdatedDependenciesMetadata(oldMetadata).also {
this[libFile, srcFile] = it
}
private inner class CacheUpdaterInternal {
val signatureHashCalculator = IdSignatureHashCalculator()
@@ -101,3 +101,52 @@ abstract class KotlinSourceFileMetadata : KotlinSourceFileExports() {
}
fun KotlinSourceFileMetadata.isEmpty() = inverseDependencies.isEmpty() && directDependencies.isEmpty()
internal class DirtyFileExports(
override val inverseDependencies: KotlinSourceFileMutableMap<Set<IdSignature>> = KotlinSourceFileMutableMap()
) : KotlinSourceFileExports() {
override fun getExportedSignatures(): Set<IdSignature> = allExportedSignatures
val allExportedSignatures = hashSetOf<IdSignature>()
}
internal class DirtyFileMetadata(
val maybeImportedSignatures: Collection<IdSignature>,
val oldDirectDependencies: KotlinSourceFileMap<*>,
override val inverseDependencies: KotlinSourceFileMutableMap<MutableSet<IdSignature>> = KotlinSourceFileMutableMap(),
override val directDependencies: KotlinSourceFileMutableMap<MutableMap<IdSignature, ICHash>> = KotlinSourceFileMutableMap(),
) : KotlinSourceFileMetadata() {
fun addInverseDependency(lib: KotlinLibraryFile, src: KotlinSourceFile, signature: IdSignature) =
when (val signatures = inverseDependencies[lib, src]) {
null -> inverseDependencies[lib, src] = hashSetOf(signature)
else -> signatures += signature
}
fun addDirectDependency(lib: KotlinLibraryFile, src: KotlinSourceFile, signature: IdSignature, hash: ICHash) =
when (val signatures = directDependencies[lib, src]) {
null -> directDependencies[lib, src] = hashMapOf(signature to hash)
else -> signatures[signature] = hash
}
}
internal class UpdatedDependenciesMetadata(oldMetadata: KotlinSourceFileMetadata) : KotlinSourceFileMetadata() {
private val oldInverseDependencies = oldMetadata.inverseDependencies
private val newExportedSignatures: Set<IdSignature> by lazy { inverseDependencies.flatSignatures() }
var importedSignaturesModified = false
override val inverseDependencies = oldMetadata.inverseDependencies.toMutable()
override val directDependencies = oldMetadata.directDependencies.toMutable()
override fun getExportedSignatures(): Set<IdSignature> = newExportedSignatures
fun isExportedSignaturesUpdated() = newExportedSignatures != oldInverseDependencies.flatSignatures()
}
internal fun KotlinSourceFileMutableMap<UpdatedDependenciesMetadata>.addNewMetadata(
libFile: KotlinLibraryFile, srcFile: KotlinSourceFile, oldMetadata: KotlinSourceFileMetadata
) = this[libFile, srcFile] ?: UpdatedDependenciesMetadata(oldMetadata).also {
this[libFile, srcFile] = it
}