public override void Execute(object parameter) { SearchForIssuesDialog dlg = new SearchForIssuesDialog(); dlg.Owner = SD.Workbench.MainWindow; if (dlg.ShowDialog() == true) { string title = "Issue Search"; var providers = dlg.SelectedProviders.ToList(); var fileNames = GetFilesToSearch(dlg.Target).ToList(); if (dlg.FixIssues) { int fixedIssueCount = 0; IReadOnlyList <SearchResultMatch> remainingIssues = null; AsynchronousWaitDialog.RunInCancellableWaitDialog( title, null, monitor => { remainingIssues = FindAndFixIssues(fileNames, providers, monitor, out fixedIssueCount); }); if (remainingIssues == null) { return; // can happen if issue search is cancelled } string message = string.Format( "{0} issues were fixed automatically." + "{1} issues are remaining (no automatic fix available).", fixedIssueCount, remainingIssues.Count); SearchResultsPad.Instance.ShowSearchResults(title, remainingIssues); MessageService.ShowMessage(message, title); } else if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Shift)) { // Ctrl+Alt+Shift => run issue search on main thread, // this helps debugging as exceptions don't get caught and passed from one thread to another List <SearchResultMatch> issues = new List <SearchResultMatch>(); AsynchronousWaitDialog.RunInCancellableWaitDialog( title, null, monitor => SearchForIssues(fileNames, providers, f => issues.AddRange(f.Matches), monitor) ); SearchResultsPad.Instance.ShowSearchResults(title, issues); } else { var monitor = SD.StatusBar.CreateProgressMonitor(); var observable = ReactiveExtensions.CreateObservable <SearchedFile>( (m, c) => SearchForIssuesAsync(fileNames, providers, c, m), monitor); SearchResultsPad.Instance.ShowSearchResults(title, observable); } } }
public override void Execute(object parameter) { SearchForIssuesDialog dlg = new SearchForIssuesDialog(); dlg.Owner = SD.Workbench.MainWindow; if (dlg.ShowDialog() == true) { string title = "Issue Search"; var providers = dlg.SelectedProviders.ToList(); var fileNames = GetFilesToSearch(dlg.Target).ToList(); if (dlg.FixIssues) { int fixedIssueCount = 0; IReadOnlyList<SearchResultMatch> remainingIssues = null; AsynchronousWaitDialog.RunInCancellableWaitDialog( title, null, monitor => { remainingIssues = FindAndFixIssues(fileNames, providers, monitor, out fixedIssueCount); }); if (remainingIssues == null) return; // can happen if issue search is cancelled string message = string.Format( "{0} issues were fixed automatically." + "{1} issues are remaining (no automatic fix available).", fixedIssueCount, remainingIssues.Count); SearchResultsPad.Instance.ShowSearchResults(title, remainingIssues); MessageService.ShowMessage(message, title); } else if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Shift)) { // Ctrl+Alt+Shift => run issue search on main thread, // this helps debugging as exceptions don't get caught and passed from one thread to another List<SearchResultMatch> issues = new List<SearchResultMatch>(); AsynchronousWaitDialog.RunInCancellableWaitDialog( title, null, monitor => SearchForIssues(fileNames, providers, f => issues.AddRange(f.Matches), monitor) ); SearchResultsPad.Instance.ShowSearchResults(title, issues); } else { var monitor = SD.StatusBar.CreateProgressMonitor(); var observable = ReactiveExtensions.CreateObservable<SearchedFile>( (m, c) => SearchForIssuesAsync(fileNames, providers, c, m), monitor); SearchResultsPad.Instance.ShowSearchResults(title, observable); } } }