internal static async void Execute () { var project = IdeApp.ProjectOperations.CurrentSelectedProject; if (project == null) return; var analysisProject = TypeSystemService.GetCodeAnalysisProject (project); if (analysisProject == null) return; try { using (var monitor = IdeApp.Workbench.ProgressMonitors.GetStatusProgressMonitor (GettextCatalog.GetString ("Analyzing project"), null, false, true, false, null, true)) { CancellationToken token = monitor.CancellationToken; var allDiagnostics = await Task.Run (async delegate { var diagnosticList = new List<Diagnostic> (); monitor.BeginTask (GettextCatalog.GetString ("Analyzing {0}", project.Name), 1); var providers = await AnalyzeWholeSolutionHandler.GetProviders (analysisProject); diagnosticList.AddRange (await AnalyzeWholeSolutionHandler.GetDiagnostics (analysisProject, providers, token)); monitor.EndTask (); return diagnosticList; }).ConfigureAwait (false); await Runtime.RunInMainThread (delegate { AnalyzeWholeSolutionHandler.Report (monitor, allDiagnostics, project); }).ConfigureAwait (false); } } catch (OperationCanceledException) { } catch (AggregateException ae) { ae.Flatten ().Handle (ix => ix is OperationCanceledException); } catch (Exception e) { LoggingService.LogError ("Error while running diagnostics.", e); } }