protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
            {
                _contextAccessor = await _workspaceProjectContextProvider.CreateProjectContextAsync(_project);

                if (_contextAccessor == null)
                {
                    return;
                }

                _activeWorkspaceProjectContextTracker.RegisterContext(_contextAccessor.ContextId);

                _disposables = new DisposableBag(CancellationToken.None);

                _applyChangesToWorkspaceContext = _applyChangesToWorkspaceContextFactory.CreateExport();
                _applyChangesToWorkspaceContext.Value.Initialize(_contextAccessor.Context);
                _disposables.AddDisposable(_applyChangesToWorkspaceContext);

                _evaluationProgressRegistration = _dataProgressTrackerService.RegisterForIntelliSense(_project, nameof(WorkspaceProjectContextHostInstance) + ".Evaluation");
                _disposables.AddDisposable(_evaluationProgressRegistration);

                _projectBuildProgressRegistration = _dataProgressTrackerService.RegisterForIntelliSense(_project, nameof(WorkspaceProjectContextHostInstance) + ".ProjectBuild");
                _disposables.AddDisposable(_projectBuildProgressRegistration);

                // We avoid suppressing version updates, so that progress tracker doesn't
                // think we're still "in progress" in the case of an empty change
                _disposables.AddDisposable(_projectSubscriptionService.ProjectRuleSource.SourceBlock.LinkToAsyncAction(
                                               target: e => OnProjectChangedAsync(e, evaluation: true),
                                               suppressVersionOnlyUpdates: false,
                                               ruleNames: _applyChangesToWorkspaceContext.Value.GetProjectEvaluationRules()));

                _disposables.AddDisposable(_projectSubscriptionService.ProjectBuildRuleSource.SourceBlock.LinkToAsyncAction(
                                               target: e => OnProjectChangedAsync(e, evaluation: false),
                                               suppressVersionOnlyUpdates: false,
                                               ruleNames: _applyChangesToWorkspaceContext.Value.GetProjectBuildRules()));
            }
예제 #2
0
        public async Task OpenContextForWriteAsync_WhenInitializedWithContext_CallsAction()
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.Create();
            var workspaceProjectContextProvider = IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(accessor);

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : workspaceProjectContextProvider);

            IWorkspaceProjectContextAccessor result = null;
            await instance.OpenContextForWriteAsync(a => { result = a; return(Task.CompletedTask); });

            Assert.Same(accessor, result);
        }
        public async Task ReleaseProjectContextAsync(IWorkspaceProjectContextAccessor accessor)
        {
            Requires.NotNull(accessor, nameof(accessor));

            try
            {
                accessor.Context.Dispose();
            }
            catch (Exception ex)
            {
                await _faultHandlerService.ReportFaultAsync(ex, _project, ProjectFaultSeverity.Recoverable);
            }
        }
예제 #4
0
        public async Task ReleaseProjectContextAsync(IWorkspaceProjectContextAccessor accessor)
        {
            Requires.NotNull(accessor, nameof(accessor));

            // TODO: https://github.com/dotnet/project-system/issues/353.
            await _threadingService.SwitchToUIThread();

            try
            {
                accessor.Context.Dispose();
            }
            catch (Exception ex) when(_telemetryService.PostFault(TelemetryEventName.LanguageServiceInitFault, ex))
            {
            }
        }
예제 #5
0
        public async Task Dispose_WhenInitializedWithContext_ReleasesContext()
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.Create();

            IWorkspaceProjectContextAccessor result = null;
            var provider = new WorkspaceProjectContextProviderMock();

            provider.ImplementCreateProjectContextAsync(project => accessor);
            provider.ImplementReleaseProjectContextAsync(a => { result = a; });

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : provider.Object);

            await instance.DisposeAsync();

            Assert.Same(accessor, result);
        }
        public async Task ReleaseProjectContextAsync(IWorkspaceProjectContextAccessor accessor)
        {
            Requires.NotNull(accessor, nameof(accessor));

            // TODO: https://github.com/dotnet/project-system/issues/353.
            await _threadingService.SwitchToUIThread();

            try
            {
                accessor.Context.Dispose();
            }
            catch (Exception ex)
            {
                await _faultHandlerService.ReportFaultAsync(ex, _project, ProjectFaultSeverity.Recoverable);
            }
        }
            protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
            {
                _contextAccessor = await _workspaceProjectContextProvider.CreateProjectContextAsync(_project);

                if (_contextAccessor == null)
                {
                    return;
                }

                _activeWorkspaceProjectContextTracker.RegisterContext(_contextAccessor.ContextId);

                _applyChangesToWorkspaceContext = _applyChangesToWorkspaceContextFactory.CreateExport();
                _applyChangesToWorkspaceContext.Value.Initialize(_contextAccessor.Context);

                _subscriptions = new DisposableBag(CancellationToken.None);
                _subscriptions.AddDisposable(_projectSubscriptionService.ProjectRuleSource.SourceBlock.LinkToAsyncAction(
                                                 target: e => OnProjectChangedAsync(e, evaluation: true),
                                                 ruleNames: _applyChangesToWorkspaceContext.Value.GetProjectEvaluationRules()));

                _subscriptions.AddDisposable(_projectSubscriptionService.ProjectBuildRuleSource.SourceBlock.LinkToAsyncAction(
                                                 target: e => OnProjectChangedAsync(e, evaluation: false),
                                                 ruleNames: _applyChangesToWorkspaceContext.Value.GetProjectBuildRules()));
            }
 public ActiveWorkspaceProjectContextHost(IWorkspaceProjectContextAccessor accessor)
 {
     _accessor = accessor;
 }
 public static IActiveWorkspaceProjectContextHost ImplementProjectContextAccessor(IWorkspaceProjectContextAccessor accessor)
 {
     return(new ActiveWorkspaceProjectContextHost(accessor));
 }
예제 #10
0
        public static IWorkspaceProjectContextProvider ImplementCreateProjectContextAsync(IWorkspaceProjectContextAccessor accessor)
        {
            var mock = new WorkspaceProjectContextProviderMock();

            mock.ImplementCreateProjectContextAsync(project => accessor);

            return(mock.Object);
        }