private Solution ApplyFileChanges(Solution solution, IEnumerable<FileChange> fileChanges, bool applyingChanges) { foreach (FileChange fileChange in fileChanges) { var oldDocument = fileChange.GetOldDocument(); var updatedDocument = fileChange.GetUpdatedDocument(); bool isAdditionalDoc = fileChange.IsAdditionalDocumentChange; if (oldDocument == null) { // Added document to new solution. // If unchecked, then remove this added document from new solution. if (applyingChanges && fileChange.CheckState == __PREVIEWCHANGESITEMCHECKSTATE.PCCS_Unchecked) { solution = isAdditionalDoc ? solution.RemoveAdditionalDocument(updatedDocument.Id) : solution.RemoveDocument(updatedDocument.Id); } } else if (updatedDocument == null) { // Removed document from old solution. // If unchecked, then add back this removed document to new solution. if (applyingChanges && fileChange.CheckState == __PREVIEWCHANGESITEMCHECKSTATE.PCCS_Unchecked) { var oldText = oldDocument.GetTextAsync().Result.ToString(); solution = isAdditionalDoc ? solution.AddAdditionalDocument(oldDocument.Id, oldDocument.Name, oldText, oldDocument.Folders, oldDocument.FilePath) : solution.AddDocument(oldDocument.Id, oldDocument.Name, oldText, oldDocument.Folders, oldDocument.FilePath); } } else { // Changed document. solution = isAdditionalDoc ? solution.WithAdditionalDocumentText(updatedDocument.Id, updatedDocument.GetTextAsync().Result) : solution.WithDocumentText(updatedDocument.Id, updatedDocument.GetTextAsync().Result); } } return solution; }