[k2] Convert allDependsOnDependencies to FirModuleData member property

This essentially caches topological sort of dependsOn-dependencies in
FirModuleData. Caching it became more necessary after previous commits
that started to call it quite frequently in
VariableStorageImpl.getStability
This commit is contained in:
Dmitry Savvinov
2024-01-30 18:12:49 +01:00
committed by Space Team
parent f28863b983
commit d80dee6e1c
3 changed files with 11 additions and 3 deletions
@@ -48,6 +48,10 @@ class LLFirModuleData private constructor(val ktModule: KtModule) : FirModuleDat
ktModule.directDependsOnDependencies.map(::LLFirModuleData)
}
override val allDependsOnDependencies: List<FirModuleData> by lazy(LazyThreadSafetyMode.PUBLICATION) {
ktModule.transitiveDependsOnDependencies.map(::LLFirModuleData)
}
override val friendDependencies: List<FirModuleData> by lazy(LazyThreadSafetyMode.PUBLICATION) {
ktModule.directFriendDependencies.map(::LLFirModuleData)
}
@@ -49,8 +49,6 @@ abstract class FirModuleVisibilityChecker : FirSessionComponent {
}
}
val FirModuleData.allDependsOnDependencies: List<FirModuleData> get() = topologicalSort(dependsOnDependencies) { it.dependsOnDependencies }
abstract class FirVisibilityChecker : FirSessionComponent {
@NoMutableState
object Default : FirVisibilityChecker() {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.container.topologicalSort
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon
@@ -46,6 +47,10 @@ abstract class FirModuleData : FirSessionComponent {
abstract val name: Name
abstract val dependencies: List<FirModuleData>
abstract val dependsOnDependencies: List<FirModuleData>
/** Transitive closure over [dependsOnDependencies] */
abstract val allDependsOnDependencies: List<FirModuleData>
abstract val friendDependencies: List<FirModuleData>
abstract val platform: TargetPlatform
abstract val isCommon: Boolean
@@ -87,9 +92,10 @@ class FirModuleDataImpl(
override val session: FirSession
get() = boundSession
?: error("module data ${this::class.simpleName}:${name} not bound to session")
override val allDependsOnDependencies: List<FirModuleData> = topologicalSort(dependsOnDependencies) { it.dependsOnDependencies }
}
val FirSession.nullableModuleData: FirModuleData? by FirSession.nullableSessionComponentAccessor()
val FirSession.moduleData: FirModuleData
get() = nullableModuleData ?: error("Module data is not registered in $this")