MI-187 Add asserts for module dependencies
This commit is contained in:
committed by
teamcityserver
parent
3fe388bd17
commit
31420a934c
@@ -142,24 +142,29 @@ class LazyModuleDependencies<M : ModuleInfo>(
|
|||||||
) : ModuleDependencies {
|
) : ModuleDependencies {
|
||||||
|
|
||||||
private val dependencies = storageManager.createLazyValue {
|
private val dependencies = storageManager.createLazyValue {
|
||||||
|
|
||||||
val moduleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
|
val moduleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
|
||||||
firstDependency?.let {
|
firstDependency?.let {
|
||||||
|
module.assertModuleDependencyIsCorrect(it)
|
||||||
moduleDescriptors.add(resolverForProject.descriptorForModule(it))
|
moduleDescriptors.add(resolverForProject.descriptorForModule(it))
|
||||||
}
|
}
|
||||||
val moduleDescriptor = resolverForProject.descriptorForModule(module)
|
val moduleDescriptor = resolverForProject.descriptorForModule(module)
|
||||||
val dependencyOnBuiltIns = module.dependencyOnBuiltIns()
|
val dependencyOnBuiltIns = module.dependencyOnBuiltIns()
|
||||||
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.AFTER_SDK) {
|
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()) {
|
for (dependency in module.dependencies()) {
|
||||||
if (dependency == firstDependency) continue
|
if (dependency == firstDependency) continue
|
||||||
|
module.assertModuleDependencyIsCorrect(dependency)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
moduleDescriptors.add(resolverForProject.descriptorForModule(dependency as M))
|
moduleDescriptors.add(resolverForProject.descriptorForModule(dependency as M))
|
||||||
}
|
}
|
||||||
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.LAST) {
|
if (dependencyOnBuiltIns == ModuleInfo.DependencyOnBuiltIns.LAST) {
|
||||||
moduleDescriptors.add(moduleDescriptor.builtIns.builtInsModule)
|
val builtInsModule = moduleDescriptor.builtIns.builtInsModule
|
||||||
|
module.assertModuleDependencyIsCorrect(builtInsModule)
|
||||||
|
moduleDescriptors.add(builtInsModule)
|
||||||
}
|
}
|
||||||
moduleDescriptors.toList()
|
moduleDescriptors.toList()
|
||||||
}
|
}
|
||||||
@@ -168,6 +173,7 @@ class LazyModuleDependencies<M : ModuleInfo>(
|
|||||||
|
|
||||||
override val directExpectedByDependencies by storageManager.createLazyValue {
|
override val directExpectedByDependencies by storageManager.createLazyValue {
|
||||||
module.expectedBy.map {
|
module.expectedBy.map {
|
||||||
|
module.assertModuleDependencyIsCorrect(it)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
resolverForProject.descriptorForModule(it as M)
|
resolverForProject.descriptorForModule(it as M)
|
||||||
}
|
}
|
||||||
@@ -175,6 +181,7 @@ class LazyModuleDependencies<M : ModuleInfo>(
|
|||||||
|
|
||||||
override val allExpectedByDependencies: Set<ModuleDescriptorImpl> by storageManager.createLazyValue {
|
override val allExpectedByDependencies: Set<ModuleDescriptorImpl> by storageManager.createLazyValue {
|
||||||
collectAllExpectedByModules(module).mapTo(HashSet<ModuleDescriptorImpl>()) {
|
collectAllExpectedByModules(module).mapTo(HashSet<ModuleDescriptorImpl>()) {
|
||||||
|
module.assertModuleDependencyIsCorrect(it)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
resolverForProject.descriptorForModule(it as M)
|
resolverForProject.descriptorForModule(it as M)
|
||||||
}
|
}
|
||||||
@@ -183,10 +190,22 @@ class LazyModuleDependencies<M : ModuleInfo>(
|
|||||||
override val modulesWhoseInternalsAreVisible: Set<ModuleDescriptorImpl>
|
override val modulesWhoseInternalsAreVisible: Set<ModuleDescriptorImpl>
|
||||||
get() =
|
get() =
|
||||||
module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) {
|
module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) {
|
||||||
|
module.assertModuleDependencyIsCorrect(it)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
resolverForProject.descriptorForModule(it as M)
|
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 {
|
interface PackageOracle {
|
||||||
|
|||||||
Reference in New Issue
Block a user