Beispiel #1
0
        public static IList <ProjectFile> GetAllSourceFiles([NotNull] this DirectoryInfo solutionFolder, [NotNull] IFileFilter fileFilter)
        {
            Contract.Requires(solutionFolder != null);
            Contract.Requires(fileFilter != null);
            Contract.Ensures(Contract.Result <IList <ProjectFile> >() != null);

            var solutionFolderLength = solutionFolder.FullName.Length + 1;

            var fileInfos = solutionFolder.EnumerateFiles("*.*", SearchOption.AllDirectories);

            Contract.Assume(fileInfos != null);

            var allProjectFiles = fileInfos
                                  .Select(fileInfo => new ProjectFile(fileInfo.FullName, solutionFolder.FullName, @"<unknown>", null))
                                  .Where(fileFilter.IncludeFile)
                                  .Where(file => file.IsResourceFile() || fileFilter.IsSourceFile(file))
                                  .ToArray();

            var fileNamesByDirectory = allProjectFiles.GroupBy(file => file.GetBaseDirectory()).ToArray();

            foreach (var directoryFiles in fileNamesByDirectory)
            {
                var directoryPath = directoryFiles?.Key;

                if (string.IsNullOrEmpty(directoryPath))
                {
                    continue;
                }

                var directory = new DirectoryInfo(directoryPath);
                var project   = FindProject(directory, solutionFolder.FullName);

                var projectName       = "<no project>";
                var uniqueProjectName = (string)null;

                if (project != null)
                {
                    projectName = Path.ChangeExtension(project.Name, null);

                    var fullProjectName = project.FullName;
                    if (fullProjectName.Length >= solutionFolderLength) // project found is in solution tree
                    {
                        uniqueProjectName = fullProjectName.Substring(solutionFolderLength);
                    }
                }

                foreach (var file in directoryFiles)
                {
                    Contract.Assume(file != null);
                    file.ProjectName       = projectName;
                    file.UniqueProjectName = uniqueProjectName;
                }
            }

            return(allProjectFiles);
        }
 public static bool Matches(this IFileFilter filter, ProjectFile file)
 {
     return(filter.IncludeFile(file) && (file.IsResourceFile() || filter.IsSourceFile(file)));
 }