[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)
|
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) {
|
override val friendDependencies: List<FirModuleData> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
ktModule.directFriendDependencies.map(::LLFirModuleData)
|
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 {
|
abstract class FirVisibilityChecker : FirSessionComponent {
|
||||||
@NoMutableState
|
@NoMutableState
|
||||||
object Default : FirVisibilityChecker() {
|
object Default : FirVisibilityChecker() {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.container.topologicalSort
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
import org.jetbrains.kotlin.platform.isCommon
|
||||||
@@ -46,6 +47,10 @@ abstract class FirModuleData : FirSessionComponent {
|
|||||||
abstract val name: Name
|
abstract val name: Name
|
||||||
abstract val dependencies: List<FirModuleData>
|
abstract val dependencies: List<FirModuleData>
|
||||||
abstract val dependsOnDependencies: List<FirModuleData>
|
abstract val dependsOnDependencies: List<FirModuleData>
|
||||||
|
|
||||||
|
/** Transitive closure over [dependsOnDependencies] */
|
||||||
|
abstract val allDependsOnDependencies: List<FirModuleData>
|
||||||
|
|
||||||
abstract val friendDependencies: List<FirModuleData>
|
abstract val friendDependencies: List<FirModuleData>
|
||||||
abstract val platform: TargetPlatform
|
abstract val platform: TargetPlatform
|
||||||
abstract val isCommon: Boolean
|
abstract val isCommon: Boolean
|
||||||
@@ -87,9 +92,10 @@ class FirModuleDataImpl(
|
|||||||
override val session: FirSession
|
override val session: FirSession
|
||||||
get() = boundSession
|
get() = boundSession
|
||||||
?: error("module data ${this::class.simpleName}:${name} not bound to session")
|
?: 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.nullableModuleData: FirModuleData? by FirSession.nullableSessionComponentAccessor()
|
||||||
val FirSession.moduleData: FirModuleData
|
val FirSession.moduleData: FirModuleData
|
||||||
get() = nullableModuleData ?: error("Module data is not registered in $this")
|
get() = nullableModuleData ?: error("Module data is not registered in $this")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user