Ejemplo n.º 1
0
		/// <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;
			}
        }