func()

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
}