in codegen/module.go [1142:1187]
func (system *ModuleSystem) collectTransitiveDependencies(
initialInstances []ModuleDependency,
allModules map[string][]*ModuleInstance,
) (map[string][]*ModuleInstance, error) {
toBeBuiltModules := make(map[ModuleDependency]*ModuleInstance, 0)
for _, className := range system.classOrder {
// Convert every ModuleDependency to its corresponding *ModuleInstance
for _, initialInstance := range initialInstances {
for _, instance := range allModules[className] {
if initialInstance.equal(instance) {
toBeBuiltModules[instance.AsModuleDependency()] = instance
break
}
}
}
// Collect all the ModuleInstances that depend on anything from toBeBuiltModules
for _, dependentInstance := range toBeBuiltModules {
for _, instance := range allModules[className] {
classInstanceTransitives := instance.RecursiveDependencies[dependentInstance.ClassName]
for _, classInstanceDependency := range classInstanceTransitives {
if !classInstanceDependency.equal(dependentInstance) {
continue
}
toBeBuiltModules[instance.AsModuleDependency()] = instance
break
}
}
}
}
toBeBuiltModulesList := make(map[string][]*ModuleInstance)
for _, instance := range toBeBuiltModules {
if _, ok := toBeBuiltModulesList[instance.ClassName]; !ok {
toBeBuiltModulesList[instance.ClassName] = make([]*ModuleInstance, 0)
}
toBeBuiltModulesList[instance.ClassName] = append(toBeBuiltModulesList[instance.ClassName], instance)
}
system.trimToSelectiveDependencies(toBeBuiltModulesList)
return toBeBuiltModulesList, nil
}