[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:
committed by
Space Team
parent
f28863b983
commit
d80dee6e1c
+4
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user