public override IEnumerable <IssueTrackerEvent> parseIssueTrackerEvents() { // First get the patch uploads IEnumerable <BugzillaAttachmentInfo> attachmentList = (IEnumerable <BugzillaAttachmentInfo>)AttachmentFactory.parseIssueTrackerEvents(); // Lookup table to add file names to BugzillaReviews Dictionary <UInt64, IList <string> > dictAttachments = attachmentList.ToDictionary(bai => bai.AttachmentId, bai => bai.Filenames); // Second, get reviews IEnumerable <BugzillaReview> reviewList = GetActivityInfoFromFile(InputFilePath, dictAttachments); HashSet <int> setOfAllUsedBugIds = new HashSet <int>(reviewList.Select(review => review.BugId)); AttachmentFactory.IncludeAttachmentsFilter = (attachment) => setOfAllUsedBugIds.Contains(attachment.BugId); attachmentList = (IEnumerable <BugzillaAttachmentInfo>)AttachmentFactory.parseIssueTrackerEvents(); // re-read the list return(MergeUtils.Merge <IssueTrackerEvent>(attachmentList, reviewList, (patch, review) => patch.When <= review.When)); }