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())); }
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); } }
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)) { } }
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)); }
public static IWorkspaceProjectContextProvider ImplementCreateProjectContextAsync(IWorkspaceProjectContextAccessor accessor) { var mock = new WorkspaceProjectContextProviderMock(); mock.ImplementCreateProjectContextAsync(project => accessor); return(mock.Object); }