Example #1
0
        /// <summary>
        /// Finds all the source files under a directory that contain reflection markup
        /// </summary>
        /// <param name="Directory">The directory to search</param>
        /// <param name="MetadataCache">Cache of source file metadata</param>
        /// <param name="ExcludedFolderNames">Set of folder names to ignore when recursing the directory tree</param>
        /// <param name="FilesWithMarkup">Receives the set of files which contain reflection markup</param>
        /// <param name="Queue">Queue to add sub-tasks to</param>
        static void FindFilesWithMarkup(DirectoryItem Directory, SourceFileMetadataCache MetadataCache, ReadOnlyHashSet <string> ExcludedFolderNames, ConcurrentBag <FileItem> FilesWithMarkup, ThreadPoolWorkQueue Queue)
        {
            // Search through all the subfolders
            foreach (DirectoryItem SubDirectory in Directory.EnumerateDirectories())
            {
                if (!ExcludedFolderNames.Contains(SubDirectory.Name))
                {
                    Queue.Enqueue(() => FindFilesWithMarkup(SubDirectory, MetadataCache, ExcludedFolderNames, FilesWithMarkup, Queue));
                }
            }

            // Check for all the headers in this folder
            foreach (FileItem File in Directory.EnumerateFiles())
            {
                if (File.HasExtension(".h") && MetadataCache.ContainsReflectionMarkup(File))
                {
                    FilesWithMarkup.Add(File);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Search through a directory tree for any rules files
        /// </summary>
        /// <param name="Directory">The root directory to search from</param>
        /// <param name="Cache">Receives all the discovered rules files</param>
        /// <param name="Queue">Queue for adding additional tasks to</param>
        private static void FindAllRulesFilesRecursively(DirectoryItem Directory, RulesFileCache Cache, ThreadPoolWorkQueue Queue)
        {
            // Scan all the files in this directory
            bool bSearchSubFolders = true;

            foreach (FileItem File in Directory.EnumerateFiles())
            {
                if (File.HasExtension(".build.cs"))
                {
                    lock (Cache.ModuleRules)
                    {
                        Cache.ModuleRules.Add(File.Location);
                    }
                    bSearchSubFolders = false;
                }
                else if (File.HasExtension(".target.cs"))
                {
                    lock (Cache.TargetRules)
                    {
                        Cache.TargetRules.Add(File.Location);
                    }
                }
                else if (File.HasExtension(".automation.csproj"))
                {
                    lock (Cache.AutomationModules)
                    {
                        Cache.AutomationModules.Add(File.Location);
                    }
                    bSearchSubFolders = false;
                }
            }

            // If we didn't find anything to stop the search, search all the subdirectories too
            if (bSearchSubFolders)
            {
                foreach (DirectoryItem SubDirectory in Directory.EnumerateDirectories())
                {
                    Queue.Enqueue(() => FindAllRulesFilesRecursively(SubDirectory, Cache, Queue));
                }
            }
        }