private void SubscribeToConfiguredProject( ConfiguredProject configuredProject, IProjectSubscriptionService subscriptionService, IReadOnlyCollection <string> watchedEvaluationRules, IReadOnlyCollection <string> watchedJointRules) { Subscribe(RuleSource.Evaluation, subscriptionService.ProjectRuleSource, watchedEvaluationRules); Subscribe(RuleSource.Joint, subscriptionService.JointRuleSource, watchedJointRules); void Subscribe(RuleSource source, IProjectValueDataSource <IProjectSubscriptionUpdate> dataSource, IReadOnlyCollection <string> ruleNames) { // Use intermediate buffer blocks for project rule data to allow subsequent blocks // to only observe specific rule name(s). var intermediateBlock = new BufferBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >( new ExecutionDataflowBlockOptions() { NameFormat = string.Intern($"CrossTarget Intermediate {source} Input: {{1}}") }); ITargetBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > > actionBlock = DataflowBlockSlim.CreateActionBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > >( e => OnProjectChangedAsync(e.Value.Item1, e.Value.Item2, e.Value.Item3, configuredProject), new ExecutionDataflowBlockOptions() { NameFormat = string.Intern($"CrossTarget {source} Input: {{1}}") }); _subscriptions ??= new DisposableBag(); _subscriptions.Add( dataSource.SourceBlock.LinkTo( intermediateBlock, ruleNames: ruleNames, suppressVersionOnlyUpdates: true, linkOptions: DataflowOption.PropagateCompletion)); _subscriptions.Add(ProjectDataSources.SyncLinkTo( intermediateBlock.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), actionBlock, linkOptions: DataflowOption.PropagateCompletion)); } }
protected override void SubscribeToConfiguredProject( ConfiguredProject configuredProject, IProjectSubscriptionService subscriptionService) { Subscribe( configuredProject, subscriptionService.ProjectRuleSource, ruleNames: new[] { ConfigurationGeneral.SchemaName }, "Dependencies Shared Projects Input: {1}", blocks => ProjectDataSources.SyncLinkTo( blocks.Intermediate.SyncLinkOptions(), subscriptionService.SharedFoldersSource.SourceBlock.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), blocks.Action, linkOptions: DataflowOption.PropagateCompletion)); }
public WorkspaceProjectContextHost(ConfiguredProject project, IProjectThreadingService threadingService, IUnconfiguredProjectTasksService tasksService, IProjectSubscriptionService projectSubscriptionService, IWorkspaceProjectContextProvider workspaceProjectContextProvider, IActiveEditorContextTracker activeWorkspaceProjectContextTracker, ExportFactory <IApplyChangesToWorkspaceContext> applyChangesToWorkspaceContextFactory) : base(threadingService.JoinableTaskContext) { _project = project; _threadingService = threadingService; _tasksService = tasksService; _projectSubscriptionService = projectSubscriptionService; _workspaceProjectContextProvider = workspaceProjectContextProvider; _activeWorkspaceProjectContextTracker = activeWorkspaceProjectContextTracker; _applyChangesToWorkspaceContextFactory = applyChangesToWorkspaceContextFactory; }
public PackageRestoreProgressTracker( ConfiguredProject project, IProjectThreadingService threadingService, IProjectFaultHandlerService projectFaultHandlerService, IDataProgressTrackerService dataProgressTrackerService, IPackageRestoreDataSource dataSource, IProjectSubscriptionService projectSubscriptionService, IConfiguredProjectPackageRestoreTelemetryService packageReferenceTelemetryService) : base(threadingService.JoinableTaskContext) { _project = project; _threadingService = threadingService; _projectFaultHandlerService = projectFaultHandlerService; _dataProgressTrackerService = dataProgressTrackerService; _dataSource = dataSource; _projectSubscriptionService = projectSubscriptionService; _packageReferenceTelemetryService = packageReferenceTelemetryService; }
public WorkspaceProjectContextHostInstance(ConfiguredProject project, IProjectThreadingService threadingService, IUnconfiguredProjectTasksService tasksService, IProjectSubscriptionService projectSubscriptionService, IWorkspaceProjectContextProvider workspaceProjectContextProvider, IActiveEditorContextTracker activeWorkspaceProjectContextTracker, IActiveConfiguredProjectProvider activeConfiguredProjectProvider, ExportFactory <IApplyChangesToWorkspaceContext> applyChangesToWorkspaceContextFactory, IDataProgressTrackerService dataProgressTrackerService, ICommandLineArgumentsProvider commandLineArgumentsProvider) : base(threadingService.JoinableTaskContext) { _project = project; _projectSubscriptionService = projectSubscriptionService; _tasksService = tasksService; _workspaceProjectContextProvider = workspaceProjectContextProvider; _activeWorkspaceProjectContextTracker = activeWorkspaceProjectContextTracker; _activeConfiguredProjectProvider = activeConfiguredProjectProvider; _applyChangesToWorkspaceContextFactory = applyChangesToWorkspaceContextFactory; _dataProgressTrackerService = dataProgressTrackerService; _commandLineArgumentsProvider = commandLineArgumentsProvider; }
public WorkspaceProjectContextHost(ConfiguredProject project, IProjectThreadingService threadingService, IUnconfiguredProjectTasksService tasksService, IProjectSubscriptionService projectSubscriptionService, IWorkspaceProjectContextProvider workspaceProjectContextProvider, IActiveEditorContextTracker activeWorkspaceProjectContextTracker, IActiveConfiguredProjectProvider activeConfiguredProjectProvider, ExportFactory <IApplyChangesToWorkspaceContext> applyChangesToWorkspaceContextFactory, IDataProgressTrackerService dataProgressTrackerService, IConfiguredProjectLanguageServiceTelemetryService languageServiceTelemetryService) : base(threadingService.JoinableTaskContext) { _project = project; _threadingService = threadingService; _tasksService = tasksService; _projectSubscriptionService = projectSubscriptionService; _workspaceProjectContextProvider = workspaceProjectContextProvider; _activeWorkspaceProjectContextTracker = activeWorkspaceProjectContextTracker; _activeConfiguredProjectProvider = activeConfiguredProjectProvider; _applyChangesToWorkspaceContextFactory = applyChangesToWorkspaceContextFactory; _dataProgressTrackerService = dataProgressTrackerService; _languageServiceTelemetryService = languageServiceTelemetryService; }
private void SubscribeToConfiguredProject( ConfiguredProject configuredProject, IProjectSubscriptionService subscriptionService, IEnumerable <string> watchedEvaluationRules, IEnumerable <string> watchedDesignTimeBuildRules) { var intermediateBlockDesignTime = new BufferBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >( new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Intermediate DesignTime Input: {1}" }); var intermediateBlockEvaluation = new BufferBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >( new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Intermediate Evaluation Input: {1}" }); _designTimeBuildSubscriptionLinks.Add( subscriptionService.JointRuleSource.SourceBlock.LinkTo( intermediateBlockDesignTime, ruleNames: watchedDesignTimeBuildRules.Union(watchedEvaluationRules), suppressVersionOnlyUpdates: true, linkOptions: new DataflowLinkOptions { PropagateCompletion = true })); _evaluationSubscriptionLinks.Add( subscriptionService.ProjectRuleSource.SourceBlock.LinkTo( intermediateBlockEvaluation, ruleNames: watchedEvaluationRules, suppressVersionOnlyUpdates: true, linkOptions: new DataflowLinkOptions { PropagateCompletion = true })); var actionBlockDesignTimeBuild = new ActionBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > >( e => OnProjectChangedAsync(e, configuredProject, RuleHandlerType.DesignTimeBuild), new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget DesignTime Input: {1}" }); var actionBlockEvaluation = new ActionBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > >( e => OnProjectChangedAsync(e, configuredProject, RuleHandlerType.Evaluation), new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Evaluation Input: {1}" }); _designTimeBuildSubscriptionLinks.Add(ProjectDataSources.SyncLinkTo( intermediateBlockDesignTime.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), actionBlockDesignTimeBuild, linkOptions: new DataflowLinkOptions { PropagateCompletion = true })); _evaluationSubscriptionLinks.Add(ProjectDataSources.SyncLinkTo( intermediateBlockEvaluation.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), actionBlockEvaluation, linkOptions: new DataflowLinkOptions { PropagateCompletion = true })); }
protected AbstractItemFileWatchDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService) : base(project.Services, synchronousDisposal: true, registerDataSource: false) { _project = project; _projectSubscriptionService = projectSubscriptionService; }
public AdditionalDesignTimeBuildInputDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService) : base(project, projectSubscriptionService) { }
private async Task <WorkspaceProjectContextHostInstance> CreateInitializedInstanceAsync(ConfiguredProject project = null, IProjectThreadingService threadingService = null, IUnconfiguredProjectTasksService tasksService = null, IProjectSubscriptionService projectSubscriptionService = null, IActiveEditorContextTracker activeWorkspaceProjectContextTracker = null, IWorkspaceProjectContextProvider workspaceProjectContextProvider = null, IApplyChangesToWorkspaceContext applyChangesToWorkspaceContext = null) { var instance = CreateInstance(project, threadingService, tasksService, projectSubscriptionService, activeWorkspaceProjectContextTracker, workspaceProjectContextProvider, applyChangesToWorkspaceContext); await instance.InitializeAsync(); return(instance); }
protected abstract void SubscribeToConfiguredProject( ConfiguredProject configuredProject, IProjectSubscriptionService subscriptionService);
public async Task InitializeSubscriberAsync(ICrossTargetSubscriptionsHost host, IProjectSubscriptionService subscriptionService) { _host = host; await InitializeAsync(); IReadOnlyCollection <string> watchedEvaluationRules = GetWatchedRules(RuleHandlerType.Evaluation); IReadOnlyCollection <string> watchedDesignTimeBuildRules = GetWatchedRules(RuleHandlerType.DesignTimeBuild); SubscribeToConfiguredProject( _commonServices.ActiveConfiguredProject, subscriptionService, watchedEvaluationRules, watchedDesignTimeBuildRules); }
public void InitializeSubscriber(ICrossTargetSubscriptionsHost host, IProjectSubscriptionService subscriptionService) { _host = host; SubscribeToConfiguredProject(subscriptionService); }
public async Task InitializeSubscriberAsync(ICrossTargetSubscriptionsHost host, IProjectSubscriptionService subscriptionService) { _host = host; await InitializeAsync(); IReadOnlyCollection <string> watchedEvaluationRules = GetRuleNames(RuleSource.Evaluation); IReadOnlyCollection <string> watchedJointRules = GetRuleNames(RuleSource.Joint); SubscribeToConfiguredProject( _commonServices.ActiveConfiguredProject, subscriptionService, watchedEvaluationRules, watchedJointRules); }
public PotentialEditorConfigFilesDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService) : base(project, projectSubscriptionService) { }
protected SingleRuleSupportedValuesProvider(ConfiguredProject project, IProjectSubscriptionService subscriptionService, string ruleName, bool useNoneValue = false) : base(project, subscriptionService) { _ruleName = ruleName; _useNoneValue = useNoneValue; }
public SdkSupportedTargetPlatformVersionProvider( ConfiguredProject project, IProjectSubscriptionService subscriptionService) : base(project, subscriptionService) { }
public SdkSupportedTargetPlatformIdentifierEnumProvider( ConfiguredProject project, IProjectSubscriptionService subscriptionService) : base(project, subscriptionService, ruleName: SdkSupportedTargetPlatformIdentifier.SchemaName, useNoneValue: true) { }
public async Task InitializeSubscriberAsync(ICrossTargetSubscriptionsHost host, IProjectSubscriptionService subscriptionService) { _host = host; await InitializeAsync().ConfigureAwait(false); var watchedEvaluationRules = GetWatchedRules(RuleHandlerType.Evaluation); var watchedDesignTimeBuildRules = GetWatchedRules(RuleHandlerType.DesignTimeBuild); SubscribeToConfiguredProject( subscriptionService, watchedEvaluationRules, watchedDesignTimeBuildRules); }
private void SubscribeToConfiguredProject( ConfiguredProject configuredProject, IProjectSubscriptionService subscriptionService, IReadOnlyCollection <string> watchedEvaluationRules, IReadOnlyCollection <string> watchedDesignTimeBuildRules) { // Use intermediate buffer blocks for project rule data to allow subsequent blocks // to only observe specific rule name(s). var intermediateBlockDesignTime = new BufferBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >( new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Intermediate DesignTime Input: {1}" }); var intermediateBlockEvaluation = new BufferBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >( new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Intermediate Evaluation Input: {1}" }); _subscriptions = _subscriptions ?? new DisposableBag(); _subscriptions.AddDisposable( subscriptionService.JointRuleSource.SourceBlock.LinkTo( intermediateBlockDesignTime, ruleNames: watchedDesignTimeBuildRules.Union(watchedEvaluationRules), suppressVersionOnlyUpdates: true, linkOptions: DataflowOption.PropagateCompletion)); _subscriptions.AddDisposable( subscriptionService.ProjectRuleSource.SourceBlock.LinkTo( intermediateBlockEvaluation, ruleNames: watchedEvaluationRules, suppressVersionOnlyUpdates: true, linkOptions: DataflowOption.PropagateCompletion)); ITargetBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > > actionBlockDesignTimeBuild = DataflowBlockSlim.CreateActionBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > >( e => OnProjectChangedAsync(e.Value.Item1, e.Value.Item2, e.Value.Item3, configuredProject, RuleHandlerType.DesignTimeBuild), new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget DesignTime Input: {1}" }); ITargetBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > > actionBlockEvaluation = DataflowBlockSlim.CreateActionBlock <IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > >( e => OnProjectChangedAsync(e.Value.Item1, e.Value.Item2, e.Value.Item3, configuredProject, RuleHandlerType.Evaluation), new ExecutionDataflowBlockOptions() { NameFormat = "CrossTarget Evaluation Input: {1}" }); _subscriptions.AddDisposable(ProjectDataSources.SyncLinkTo( intermediateBlockDesignTime.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), actionBlockDesignTimeBuild, linkOptions: DataflowOption.PropagateCompletion)); _subscriptions.AddDisposable(ProjectDataSources.SyncLinkTo( intermediateBlockEvaluation.SyncLinkOptions(), subscriptionService.ProjectCatalogSource.SourceBlock.SyncLinkOptions(), configuredProject.Capabilities.SourceBlock.SyncLinkOptions(), actionBlockEvaluation, linkOptions: DataflowOption.PropagateCompletion)); }
public SdkSupportedTargetPlatformVersionEnumProvider( ConfiguredProject project, IProjectSubscriptionService subscriptionService) : base(project, subscriptionService, ruleName: SdkSupportedTargetPlatformVersion.SchemaName) { }
public PackageRestoreConfiguredInputDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService) : base(project.Services, synchronousDisposal: true, registerDataSource: false) { _containingProject = project.UnconfiguredProject; _projectSubscriptionService = projectSubscriptionService; }
public SupportedTargetFrameworksProvider( ConfiguredProject project, IProjectSubscriptionService subscriptionService) : base(project, subscriptionService) { }
private WorkspaceProjectContextHostInstance CreateInstance(ConfiguredProject project = null, IProjectThreadingService threadingService = null, IUnconfiguredProjectTasksService tasksService = null, IProjectSubscriptionService projectSubscriptionService = null, IActiveEditorContextTracker activeWorkspaceProjectContextTracker = null, IWorkspaceProjectContextProvider workspaceProjectContextProvider = null, IApplyChangesToWorkspaceContext applyChangesToWorkspaceContext = null) { project = project ?? ConfiguredProjectFactory.Create(); threadingService = threadingService ?? IProjectThreadingServiceFactory.Create(); tasksService = tasksService ?? IUnconfiguredProjectTasksServiceFactory.Create(); projectSubscriptionService = projectSubscriptionService ?? IProjectSubscriptionServiceFactory.Create(); activeWorkspaceProjectContextTracker = activeWorkspaceProjectContextTracker ?? IActiveEditorContextTrackerFactory.Create(); workspaceProjectContextProvider = workspaceProjectContextProvider ?? IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(IWorkspaceProjectContextAccessorFactory.Create()); applyChangesToWorkspaceContext = applyChangesToWorkspaceContext ?? IApplyChangesToWorkspaceContextFactory.Create(); return(new WorkspaceProjectContextHostInstance(project, threadingService, tasksService, projectSubscriptionService, workspaceProjectContextProvider, activeWorkspaceProjectContextTracker, ExportFactoryFactory.ImplementCreateValueWithAutoDispose(() => applyChangesToWorkspaceContext))); }
public static ConfiguredProjectServices Create(IPropertyPagesCatalogProvider propertyPagesCatalogProvider = null, IAdditionalRuleDefinitionsService ruleService = null, IProjectSubscriptionService projectSubscriptionService = null) { var mock = new Mock <ConfiguredProjectServices>(); mock.Setup(c => c.PropertyPagesCatalog).Returns(propertyPagesCatalogProvider); mock.Setup(c => c.AdditionalRuleDefinitions).Returns(ruleService); mock.Setup(c => c.ProjectSubscription).Returns(projectSubscriptionService); return(mock.Object); }