public DependenciesTreeConfiguredProjectSearchContext( DependenciesTreeSearchContext inner, IProjectTree targetRootNode, IVsHierarchyItemManager hierarchyItemManager, IUnconfiguredProjectVsServices projectVsServices, IRelationProvider relationProvider) { _inner = inner; _hierarchyItemManager = hierarchyItemManager; _projectVsServices = projectVsServices; _relationProvider = relationProvider; _targetRootNode = targetRootNode; }
public DependenciesTreeProjectSearchContext( DependenciesTreeSearchContext outer, UnconfiguredProject unconfiguredProject, IProjectTree dependenciesNode, IVsHierarchyItemManager hierarchyItemManager, IUnconfiguredProjectVsServices projectVsServices, IRelationProvider relationProvider) { _inner = outer; UnconfiguredProject = unconfiguredProject; _dependenciesNode = dependenciesNode; _hierarchyItemManager = hierarchyItemManager; _projectVsServices = projectVsServices; _relationProvider = relationProvider; }
public void Search(IRelationshipSearchParameters parameters, Action <ISearchResult> resultAccumulator) { Requires.NotNull(parameters, nameof(parameters)); Requires.NotNull(resultAccumulator, nameof(resultAccumulator)); if (_providers.Length == 0) { // No providers registered return; } if (!parameters.Options.SearchExternalItems) { // Consider the dependencies tree as containing 'external items', allowing the // tree to be excluded from search results via this option. return; } using var context = new DependenciesTreeSearchContext(parameters, resultAccumulator); _joinableTaskContext.Factory.Run(SearchSolutionAsync); Task SearchSolutionAsync() { // Search projects concurrently return(Task.WhenAll(_projectServiceAccessor.GetProjectService().LoadedUnconfiguredProjects.Select(SearchProjectAsync))); } async Task SearchProjectAsync(UnconfiguredProject unconfiguredProject) { IUnconfiguredProjectVsServices? projectVsServices = unconfiguredProject.Services.ExportProvider.GetExportedValue <IUnconfiguredProjectVsServices>(); IActiveConfigurationGroupService?configurationGroupService = unconfiguredProject.Services.ExportProvider.GetExportedValue <IActiveConfigurationGroupService>(); IProjectTree?dependenciesNode = projectVsServices?.ProjectTree.CurrentTree?.FindChildWithFlags(DependencyTreeFlags.DependenciesRootNode); if (projectVsServices != null && dependenciesNode != null && configurationGroupService is IActiveConfigurationGroupService2 activeConfigurationGroupService) { IConfigurationGroup <ConfiguredProject> configuredProjects = await activeConfigurationGroupService.GetActiveLoadedConfiguredProjectGroupAsync(); var projectContext = new DependenciesTreeProjectSearchContext(context, unconfiguredProject, dependenciesNode, _hierarchyItemManager, projectVsServices, _relationProvider); // Search providers concurrently await Task.WhenAll(_providers.Select(provider => provider.SearchAsync(projectContext))); } } }