/// <summary> /// Create wrapper for Roslyn internal diagnostic service. /// </summary> /// <param name="componentModel">The component model service.</param> public static RoslynDiagnosticService Create(IComponentModel componentModel) { if (_instance != null) { return(_instance); } lock (_locker) { if (_instance != null) { return(_instance); } try { _instance = new RoslynDiagnosticService(componentModel); } catch (Exception) { _instance = null; } return(_instance); } }
protected async Task <List <DiagnosticData> > GetDiagnosticsAsync(Document document, TextSpan caretSpan) { await Shell.ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); IComponentModel componentModel = await Package.GetServiceAsync <SComponentModel, IComponentModel>(); if (componentModel == null) { return(new List <DiagnosticData>()); } List <DiagnosticData> diagnosticData = null; try { var roslynService = RoslynDiagnosticService.Create(componentModel); if (roslynService != null) { diagnosticData = await roslynService.GetCurrentAcuminatorDiagnosticForDocumentSpanAsync(document, caretSpan, Package.DisposalToken); } } catch { return(new List <DiagnosticData>()); } return(diagnosticData ?? new List <DiagnosticData>()); }