private StartupProjectRegistrar CreateInstance( UnconfiguredProject project = null, IAsyncServiceProvider serviceProvider = null, IVsStartupProjectsListService vsStartupProjectsListService = null, IProjectThreadingService threadingService = null, IProjectGuidService2 projectGuidService = null, IActiveConfiguredProjectSubscriptionService projectSubscriptionService = null, ActiveConfiguredProject <DebuggerLaunchProviders> launchProviders = null) { if (serviceProvider == null) { var sp = new IAsyncServiceProviderMoq(); sp.AddService(typeof(SVsStartupProjectsListService), vsStartupProjectsListService ?? IVsStartupProjectsListServiceFactory.Create()); serviceProvider = sp; } var instance = new StartupProjectRegistrar( project ?? UnconfiguredProjectFactory.Create(), serviceProvider, threadingService ?? new IProjectThreadingServiceMock(), projectSubscriptionService ?? IActiveConfiguredProjectSubscriptionServiceFactory.Create(), launchProviders); if (projectGuidService != null) { instance.ProjectGuidServices.Add((IProjectGuidService)projectGuidService); } return(instance); }
protected override async Task InitializeCoreAsync(CancellationToken cancellationToken) { IProjectGuidService2 projectGuidService = ProjectGuidServices.FirstOrDefault()?.Value as IProjectGuidService2; if (projectGuidService == null) { return; } _projectGuid = await projectGuidService.GetProjectGuidAsync() .ConfigureAwait(false); Assumes.False(_projectGuid == Guid.Empty); _startupProjectsListService = (IVsStartupProjectsListService)await _serviceProvider.GetServiceAsync(typeof(SVsStartupProjectsListService)) .ConfigureAwait(false); Assumes.Present(_startupProjectsListService); _subscription = _projectSubscriptionService.ProjectRuleSource.SourceBlock.LinkTo( target: new ActionBlock <IProjectVersionedValue <IProjectSubscriptionUpdate> >(OnProjectChangedAsync), suppressVersionOnlyUpdates: true, linkOptions: new DataflowLinkOptions() { PropagateCompletion = true }); }
private async Task <StartupProjectRegistrar> CreateInitializedInstanceAsync( IVsStartupProjectsListService vsStartupProjectsListService = null, IProjectThreadingService threadingService = null, ISafeProjectGuidService projectGuidService = null, IActiveConfiguredProjectSubscriptionService projectSubscriptionService = null, ActiveConfiguredProject <DebuggerLaunchProviders> launchProviders = null) { var instance = CreateInstance(vsStartupProjectsListService, threadingService, projectGuidService, projectSubscriptionService, launchProviders); await instance.InitializeAsync(); return(instance); }
protected override async Task InitializeCoreAsync(CancellationToken cancellationToken) { _projectGuid = await _projectGuidService.GetProjectGuidAsync() .ConfigureAwait(false); Assumes.False(_projectGuid == Guid.Empty); _startupProjectsListService = (IVsStartupProjectsListService)await _serviceProvider.GetServiceAsync(typeof(SVsStartupProjectsListService)) .ConfigureAwait(false); Assumes.Present(_startupProjectsListService); _subscription = _projectSubscriptionService.ProjectRuleSource.SourceBlock.LinkToAsyncAction( target: OnProjectChangedAsync); }
internal async Task OnProjectChangedAsync(IProjectVersionedValue <IProjectSubscriptionUpdate>?_ = null) { bool isDebuggable = await _launchProviders.Value.IsDebuggableAsync(); IVsStartupProjectsListService startupProjectsListService = await _startupProjectsListService.GetValueAsync(); if (isDebuggable) { // If we're already registered, the service no-ops startupProjectsListService.AddProject(ref _projectGuid); } else { // If we're already unregistered, the service no-ops startupProjectsListService.RemoveProject(ref _projectGuid); } }
private StartupProjectRegistrar CreateInstance( IVsStartupProjectsListService vsStartupProjectsListService = null, IProjectThreadingService threadingService = null, ISafeProjectGuidService projectGuidService = null, IActiveConfiguredProjectSubscriptionService projectSubscriptionService = null, ActiveConfiguredProject <DebuggerLaunchProviders> launchProviders = null) { var instance = new StartupProjectRegistrar( null, IVsServiceFactory.Create <SVsStartupProjectsListService, IVsStartupProjectsListService>(vsStartupProjectsListService), threadingService ?? IProjectThreadingServiceFactory.Create(), projectGuidService ?? ISafeProjectGuidServiceFactory.ImplementGetProjectGuidAsync(Guid.NewGuid()), projectSubscriptionService ?? IActiveConfiguredProjectSubscriptionServiceFactory.Create(), launchProviders); return(instance); }
private async Task AddOrRemoveProjectFromStartupProjectList(bool initialize = false) { bool isDebuggable = await IsDebuggable().ConfigureAwait(false); await _threadingService.SwitchToUIThread(); _startupProjectsListService = _startupProjectsListService ?? _serviceProvider.GetService <IVsStartupProjectsListService, SVsStartupProjectsListService>(); if (initialize || isDebuggable != _isDebuggable) { _isDebuggable = isDebuggable; if (isDebuggable) { _startupProjectsListService.AddProject(ref _guid); } else { _startupProjectsListService.RemoveProject(ref _guid); } } }
internal Task OnProjectChangedAsync(IProjectVersionedValue <IProjectSubscriptionUpdate>?_ = null) { return(_projectTasksService.LoadedProjectAsync(async() => { bool isDebuggable = await IsDebuggableAsync(); IVsStartupProjectsListService startupProjectsListService = await _startupProjectsListService.GetValueAsync(); if (isDebuggable) { // If we're already registered, the service no-ops startupProjectsListService.AddProject(ref _projectGuid); } else { // If we're already unregistered, the service no-ops startupProjectsListService.RemoveProject(ref _projectGuid); } })); }
private StartupProjectRegistrar CreateInstance( IAsyncServiceProvider serviceProvider = null, IVsStartupProjectsListService vsStartupProjectsListService = null, IProjectThreadingService threadingService = null, IProjectGuidService2 projectGuidService = null, IActiveConfiguredProjectSubscriptionService projectSubscriptionService = null, ActiveConfiguredProject <DebuggerLaunchProviders> launchProviders = null) { if (serviceProvider == null) { var sp = new IAsyncServiceProviderMoq(); sp.AddService(typeof(SVsStartupProjectsListService), vsStartupProjectsListService ?? IVsStartupProjectsListServiceFactory.Create()); serviceProvider = sp; } return(new StartupProjectRegistrar( serviceProvider, threadingService ?? new IProjectThreadingServiceMock(), projectGuidService ?? IProjectGuidService2Factory.ImplementGetProjectGuidAsync(Guid.NewGuid()), projectSubscriptionService ?? IActiveConfiguredProjectSubscriptionServiceFactory.Create(), launchProviders)); }
public StartupProjectRegistrar( IUnconfiguredProjectVsServices projectVsServices, SVsServiceProvider serviceProvider, IProjectThreadingService threadingService, IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService, ActiveConfiguredProject <DebuggerLaunchProviders> launchProviders) : base(projectVsServices.ThreadingService.JoinableTaskContext) { Requires.NotNull(projectVsServices, nameof(projectVsServices)); Requires.NotNull(serviceProvider, nameof(serviceProvider)); Requires.NotNull(threadingService, nameof(threadingService)); Requires.NotNull(activeConfiguredProjectSubscriptionService, nameof(activeConfiguredProjectSubscriptionService)); Requires.NotNull(launchProviders, nameof(launchProviders)); _projectVsServices = projectVsServices; _startupProjectsListService = serviceProvider.GetService <IVsStartupProjectsListService, SVsStartupProjectsListService>(); _threadingService = threadingService; _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService; _launchProviders = launchProviders; WrapperMethodCaller = new DataFlowExtensionMethodCaller(new DataFlowExtensionMethodWrapper()); }
private Task <StartupProjectRegistrar> CreateInitializedInstanceAsync(Guid projectGuid, IVsStartupProjectsListService vsStartupProjectsListService, params IDebugLaunchProvider[] launchProviders) { var projectGuidService = IProjectGuidService2Factory.ImplementGetProjectGuidAsync(projectGuid); var debuggerLaunchProviders = new DebuggerLaunchProviders(ConfiguredProjectFactory.Create()); int orderPrecedence = 0; foreach (IDebugLaunchProvider launchProvider in launchProviders) { debuggerLaunchProviders.Debuggers.Add(launchProvider, orderPrecedence: orderPrecedence++); } return(CreateInitializedInstanceAsync(vsStartupProjectsListService: vsStartupProjectsListService, projectGuidService: projectGuidService, launchProviders: ActiveConfiguredProjectFactory.ImplementValue(() => debuggerLaunchProviders))); }
private Task <StartupProjectRegistrar> CreateInitializedInstanceAsync(IVsStartupProjectsListService vsStartupProjectsListService, params IDebugLaunchProvider[] launchProviders) { return(CreateInitializedInstanceAsync(Guid.NewGuid(), vsStartupProjectsListService, launchProviders)); }
private static Task <StartupProjectRegistrar> CreateInitializedInstanceAsync(Guid projectGuid, IVsStartupProjectsListService vsStartupProjectsListService, params IDebugLaunchProvider[] launchProviders) { var projectGuidService = ISafeProjectGuidServiceFactory.ImplementGetProjectGuidAsync(projectGuid); var debuggerLaunchProviders = new OrderPrecedenceImportCollection <IDebugLaunchProvider>(ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesFirst); int orderPrecedence = 0; foreach (IDebugLaunchProvider launchProvider in launchProviders) { debuggerLaunchProviders.Add(launchProvider, orderPrecedence: orderPrecedence++); } return(CreateInitializedInstanceAsync(vsStartupProjectsListService: vsStartupProjectsListService, projectGuidService: projectGuidService, launchProviders: IActiveConfiguredValuesFactory.ImplementValues(() => debuggerLaunchProviders))); }