MenuItem CreateIssueMenuItem(IEnumerable <IssueSummary> issues) { var allIssues = issues as IList <IssueSummary> ?? issues.ToList(); var issueMenuItem = new MenuItem(allIssues.First().ProviderTitle); var issueSubMenu = new Menu(); issueMenuItem.SubMenu = issueSubMenu; var actionGroups = allIssues .SelectMany(issue => issue.Actions) .GroupBy(action => action.SiblingKey); foreach (var _actionGroup in actionGroups) { var actionGroup = _actionGroup; var actionMenuItem = new MenuItem(actionGroup.First().Title); actionMenuItem.Clicked += delegate { ThreadPool.QueueUserWorkItem(delegate { try { using (var monitor = IdeApp.Workbench.ProgressMonitors.GetStatusProgressMonitor("Applying fixes", null, false)) { var fixer = new BatchFixer(new ExactIssueMatcher(), monitor); var appliedActions = fixer.TryFixIssues(actionGroup); foreach (var action in appliedActions) { ((IIssueTreeNode)action.IssueSummary).Visible = false; } } Application.Invoke(delegate { ProcessUpdateQueue(); }); } catch (Exception e) { MessageService.ShowException(e); } }); }; issueSubMenu.Items.Add(actionMenuItem); } return(issueMenuItem); }
Menu CreateIssueMenu (IEnumerable<IssueSummary> issues) { var allIssues = issues as IList<IssueSummary> ?? issues.ToList (); var issueMenu = new Menu (); var actionGroups = allIssues .SelectMany (issue => issue.Actions) .GroupBy (action => action.SiblingKey); foreach (var _actionGroup in actionGroups) { var actionGroup = _actionGroup; var actionMenuItem = new MenuItem (actionGroup.First ().Title); actionMenuItem.Clicked += delegate { ThreadPool.QueueUserWorkItem (delegate { try { using (var monitor = IdeApp.Workbench.ProgressMonitors.GetStatusProgressMonitor ("Applying fixes", null, false)) { var fixer = new BatchFixer (new ExactIssueMatcher (), monitor); var appliedActions = fixer.TryFixIssues (actionGroup); foreach (var action in appliedActions) { ((IIssueTreeNode)action.IssueSummary).Visible = false; } } Application.Invoke (delegate { ProcessUpdateQueue (); }); } catch (Exception e) { LoggingService.LogInternalError (e); } }); }; issueMenu.Items.Add (actionMenuItem); } return issueMenu; }