/// <summary>
        /// Determines if a module in this rules assembly has source code.
        /// </summary>
        /// <param name="ModuleName">Name of the module to check</param>
        /// <returns>True if the module has source files, false if the module was not found, or does not have source files.</returns>
        public bool DoesModuleHaveSource(string ModuleName)
        {
            FileReference ModuleFile;

            if (ModuleNameToModuleFile.TryGetValue(ModuleName, out ModuleFile))
            {
                bool HasSource;
                if (!ModuleHasSource.TryGetValue(ModuleFile, out HasSource))
                {
                    foreach (string FileName in Directory.EnumerateFiles(ModuleFile.Directory.FullName, "*.cpp", SearchOption.AllDirectories))
                    {
                        HasSource = true;
                        break;
                    }
                    ModuleHasSource.Add(ModuleFile, HasSource);
                }
                return(HasSource);
            }
            return((Parent == null) ? false : Parent.DoesModuleHaveSource(ModuleName));
        }