public ProjectInfo UpdateDynamicFiles(ProjectInfo projectInfo, IEnumerable <string> currentDynamicSourceFiles) { var oldFiles = dynamicSourceFiles; var newFiles = currentDynamicSourceFiles.ToImmutableHashSet(); dynamicSourceFiles = newFiles; var removedFiles = oldFiles.Except(newFiles); foreach (var document in removedFiles) { foreach (var dynamicFileProvider in dynamicFileManager.GetDynamicFileProviders(document)) { dynamicFileProvider.RemoveDynamicDocumentInfo( projectInfo.Id, projectInfo.FilePath, document); } } List <DocumentInfo> documents = new List <DocumentInfo> (); foreach (var document in dynamicSourceFiles) { foreach (var dynamicFileProvider in dynamicFileManager.GetDynamicFileProviders(document)) { var dynamicFileInfo = dynamicFileProvider.GetDynamicDocumentInfo( projectInfo.Id, projectInfo.FilePath, document); bool alreadyAdded = projectInfo.Documents.Any(d => string.Equals(d.FilePath, document, StringComparison.OrdinalIgnoreCase)); if (dynamicFileInfo != null && !alreadyAdded) { documents.Add(dynamicFileInfo); } } } projectInfo = projectInfo.WithDocuments(projectInfo.Documents.Concat(documents)); return(projectInfo); }
public ProjectInfo UpdateDynamicFiles(ProjectInfo projectInfo, IEnumerable <string> currentDynamicSourceFiles) { var oldFiles = dynamicSourceFiles; var newFiles = currentDynamicSourceFiles.ToImmutableHashSet(); dynamicSourceFiles = newFiles; var addedFiles = newFiles.Except(oldFiles); var removedFiles = oldFiles.Except(newFiles); foreach (var document in removedFiles) { foreach (var dynamicFileProvider in dynamicFileManager.GetDynamicFileProviders(document)) { dynamicFileProvider.RemoveDynamicDocumentInfo( projectInfo.Id, projectInfo.FilePath, document); } } List <DocumentInfo> documents = new List <DocumentInfo> (); foreach (var document in addedFiles) { foreach (var dynamicFileProvider in dynamicFileManager.GetDynamicFileProviders(document)) { var dynamicFileInfo = dynamicFileProvider.GetDynamicDocumentInfo( projectInfo.Id, projectInfo.FilePath, document); if (dynamicFileInfo != null) { documents.Add(dynamicFileInfo); } } } projectInfo = projectInfo.WithDocuments(projectInfo.Documents.Concat(documents)); return(projectInfo); }