/// <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);
            }
        }
Esempio n. 2
0
        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>());
        }