private void AppendFileChanges( IEnumerable <DocumentId> changedDocuments, ArrayBuilder <AbstractChange> builder ) { // Avoid showing linked changes to linked files multiple times. var linkedDocumentIds = new HashSet <DocumentId>(); var orderedChangedDocuments = changedDocuments .GroupBy(d => d.ProjectId) .OrderByDescending(g => g.Count()) .Flatten(); foreach (var documentId in orderedChangedDocuments) { if (linkedDocumentIds.Contains(documentId)) { continue; } var left = _oldSolution.GetTextDocument(documentId); var right = _newSolution.GetTextDocument(documentId); if (left is Document leftDocument) { linkedDocumentIds.AddRange(leftDocument.GetLinkedDocumentIds()); } else if (right is Document rightDocument) { // Added document. linkedDocumentIds.AddRange(rightDocument.GetLinkedDocumentIds()); } var fileChange = new FileChange( left, right, _componentModel, _topLevelChange, this, _imageService ); if (fileChange.Children.Changes.Length > 0) { builder.Add(fileChange); } } }
private void AppendFileChanges(IEnumerable<DocumentId> changedDocuments, ArrayBuilder<AbstractChange> builder) { // Avoid showing linked changes to linked files multiple times. var linkedDocumentIds = new HashSet<DocumentId>(); var orderedChangedDocuments = changedDocuments.GroupBy(d => d.ProjectId).OrderByDescending(g => g.Count()).Flatten(); foreach (var documentId in orderedChangedDocuments) { if (linkedDocumentIds.Contains(documentId)) { continue; } var left = _oldSolution.GetTextDocument(documentId); var right = _newSolution.GetTextDocument(documentId); var leftDocument = left as Document; var rightDocument = right as Document; if (leftDocument != null) { linkedDocumentIds.AddRange(leftDocument.GetLinkedDocumentIds()); } else if (rightDocument != null) { // Added document. linkedDocumentIds.AddRange(rightDocument.GetLinkedDocumentIds()); } var fileChange = new FileChange(left, right, _componentModel, _topLevelChange, this, _imageService); if (fileChange.Children.Changes.Length > 0) { builder.Add(fileChange); } } }