private async ValueTask <RoslynPackage?> TryGetRoslynPackageAsync(
            CancellationToken cancellationToken
            )
        {
            if (_roslynPackage is null)
            {
                await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(
                    cancellationToken
                    );

                var shell = (IVsShell7?)await _serviceProvider
                            .GetServiceAsync(typeof(SVsShell))
                            .ConfigureAwait(true);

                Assumes.Present(shell);
                await shell.LoadPackageAsync(typeof(RoslynPackage).GUID);

                if (
                    ErrorHandler.Succeeded(
                        ((IVsShell)shell).IsPackageLoaded(
                            typeof(RoslynPackage).GUID,
                            out var package
                            )
                        )
                    )
                {
                    _roslynPackage = (RoslynPackage)package;
                }
            }

            return(_roslynPackage);
        }
Exemplo n.º 2
0
        private async Task InitializeAsync(CancellationToken cancellationToken)
        {
            await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

            _lazyRoslynPackage = await RoslynPackage.GetOrLoadAsync(_threadingContext, _serviceProvider, cancellationToken).ConfigureAwait(true);

            Assumes.Present(_lazyRoslynPackage);

            _optionService.RefreshOption(new OptionKey(SolutionCrawlerOptions.SolutionBackgroundAnalysisScopeOption), _lazyRoslynPackage.AnalysisScope);
            _lazyRoslynPackage.AnalysisScopeChanged += OnAnalysisScopeChanged;
        }
Exemplo n.º 3
0
        internal static async ValueTask <RoslynPackage?> GetOrLoadAsync(IThreadingContext threadingContext, IAsyncServiceProvider serviceProvider, CancellationToken cancellationToken)
        {
            if (_lazyInstance is null)
            {
                await threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

                var shell = (IVsShell7?)await serviceProvider.GetServiceAsync(typeof(SVsShell)).ConfigureAwait(true);

                Assumes.Present(shell);
                await shell.LoadPackageAsync(typeof(RoslynPackage).GUID);

                if (ErrorHandler.Succeeded(((IVsShell)shell).IsPackageLoaded(typeof(RoslynPackage).GUID, out var package)))
                {
                    _lazyInstance = (RoslynPackage)package;
                }
            }

            return(_lazyInstance);
        }