MI-187 Add asserts for module dependencies

This commit is contained in:
Florian Kistner
2021-07-07 00:20:31 +02:00
committed by teamcityserver
parent 3fe388bd17
commit 31420a934c
@@ -142,24 +142,29 @@ class LazyModuleDependencies<M : ModuleInfo>(
) : ModuleDependencies {
private val dependencies = storageManager.createLazyValue {
val moduleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
firstDependency?.let {
module.assertModuleDependencyIsCorrect(it)
moduleDescriptors.add(resolverForProject.descriptorForModule(it))
}
val moduleDescriptor = resolverForProject.descriptorForModule(module)
val dependencyOnBuiltIns = module.dependencyOnBuiltIns()
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.AFTER_SDK) {
moduleDescriptors.add(moduleDescriptor.builtIns.builtInsModule)
val builtInsModule = moduleDescriptor.builtIns.builtInsModule
module.assertModuleDependencyIsCorrect(builtInsModule)
moduleDescriptors.add(builtInsModule)
}
for (dependency in module.dependencies()) {
if (dependency == firstDependency) continue
module.assertModuleDependencyIsCorrect(dependency)
@Suppress("UNCHECKED_CAST")
moduleDescriptors.add(resolverForProject.descriptorForModule(dependency as M))
}
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.LAST) {
moduleDescriptors.add(moduleDescriptor.builtIns.builtInsModule)
val builtInsModule = moduleDescriptor.builtIns.builtInsModule
module.assertModuleDependencyIsCorrect(builtInsModule)
moduleDescriptors.add(builtInsModule)
}
moduleDescriptors.toList()
}
@@ -168,6 +173,7 @@ class LazyModuleDependencies<M : ModuleInfo>(
override val directExpectedByDependencies by storageManager.createLazyValue {
module.expectedBy.map {
module.assertModuleDependencyIsCorrect(it)
@Suppress("UNCHECKED_CAST")
resolverForProject.descriptorForModule(it as M)
}
@@ -175,6 +181,7 @@ class LazyModuleDependencies<M : ModuleInfo>(
override val allExpectedByDependencies: Set<ModuleDescriptorImpl> by storageManager.createLazyValue {
collectAllExpectedByModules(module).mapTo(HashSet<ModuleDescriptorImpl>()) {
module.assertModuleDependencyIsCorrect(it)
@Suppress("UNCHECKED_CAST")
resolverForProject.descriptorForModule(it as M)
}
@@ -183,10 +190,22 @@ class LazyModuleDependencies<M : ModuleInfo>(
override val modulesWhoseInternalsAreVisible: Set<ModuleDescriptorImpl>
get() =
module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) {
module.assertModuleDependencyIsCorrect(it)
@Suppress("UNCHECKED_CAST")
resolverForProject.descriptorForModule(it as M)
}
companion object {
private fun ModuleInfo.assertModuleDependencyIsCorrect(dependency: ModuleDescriptor) {
assertModuleDependencyIsCorrect(dependency.getCapability(ModuleInfo.Capability) ?: return)
}
private fun ModuleInfo.assertModuleDependencyIsCorrect(dependency: ModuleInfo) {
assert(dependency !is DerivedModuleInfo || this is DerivedModuleInfo) {
"Derived module infos may not be referenced from regular ones"
}
}
}
}
interface PackageOracle {