diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt index d34d37da887..7d63fcfe776 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt @@ -48,6 +48,10 @@ class LLFirModuleData private constructor(val ktModule: KtModule) : FirModuleDat ktModule.directDependsOnDependencies.map(::LLFirModuleData) } + override val allDependsOnDependencies: List by lazy(LazyThreadSafetyMode.PUBLICATION) { + ktModule.transitiveDependsOnDependencies.map(::LLFirModuleData) + } + override val friendDependencies: List by lazy(LazyThreadSafetyMode.PUBLICATION) { ktModule.directFriendDependencies.map(::LLFirModuleData) } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index a99aac57393..7e536169660 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -49,8 +49,6 @@ abstract class FirModuleVisibilityChecker : FirSessionComponent { } } -val FirModuleData.allDependsOnDependencies: List get() = topologicalSort(dependsOnDependencies) { it.dependsOnDependencies } - abstract class FirVisibilityChecker : FirSessionComponent { @NoMutableState object Default : FirVisibilityChecker() { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirModuleData.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirModuleData.kt index 426ea27b7e4..fbaae703128 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirModuleData.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirModuleData.kt @@ -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 abstract val dependsOnDependencies: List + + /** Transitive closure over [dependsOnDependencies] */ + abstract val allDependsOnDependencies: List + abstract val friendDependencies: List 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 = 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") -