/// <summary> /// Recursively searches a directory for all files matching the web script file pattern. /// </summary> /// <exception cref="InvalidSourceException">Error reading the directory.</exception> private static IEnumerable<PhpSourceFile>/*!*/ EnumerateScriptsRecursive(FullPath directory, ICollection<string>/*!*/ fileExtensions, CompilationContext/*!*/ context) { Debug.Assert(fileExtensions != null && context != null); Debug.Assert(!directory.IsEmpty); string pathString = directory; foreach (string skipPath in context.Config.Compiler.ForcedDynamicInclusionTranslatedFullPaths) if (pathString.StartsWith(skipPath)) yield break; FullPath[] files, directories; try { files = directory.GetFiles(); directories = directory.GetDirectories(); } catch (Exception e) { throw new InvalidSourceException(directory, e); } // compiles scripts in the current directory: foreach (PhpSourceFile file in EnumerateScriptsInDirectory(files, fileExtensions, context)) yield return file; // processes subdirectories: foreach (FullPath dir in directories) { foreach (PhpSourceFile file in EnumerateScriptsRecursive(dir, fileExtensions, context)) yield return file; } }