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;
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 7
0
        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
            }));
        }
Ejemplo n.º 8
0
 protected AbstractItemFileWatchDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService)
     : base(project.Services, synchronousDisposal: true, registerDataSource: false)
 {
     _project = project;
     _projectSubscriptionService = projectSubscriptionService;
 }
Ejemplo n.º 9
0
 public AdditionalDesignTimeBuildInputDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService)
     : base(project, projectSubscriptionService)
 {
 }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 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);
        }
Ejemplo n.º 15
0
 public PotentialEditorConfigFilesDataSource(ConfiguredProject project, IProjectSubscriptionService projectSubscriptionService)
     : base(project, projectSubscriptionService)
 {
 }
Ejemplo n.º 16
0
 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)
 {
 }
Ejemplo n.º 18
0
 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)
 {
 }
Ejemplo n.º 22
0
 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)
 {
 }
Ejemplo n.º 24
0
        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)));
        }
Ejemplo n.º 25
0
        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);
        }