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;
		}