private void UpdateDependenciesSnapshotAsync( ImmutableDictionary <ITargetFramework, IDependenciesChanges> changes, IProjectCatalogSnapshot catalogs, ITargetFramework activeTargetFramework) { DependenciesSnapshot newSnapshot; bool anyChanges = false; HashSet <string> projectItemSpecs = GetProjectItemSpecsFromSnapshot(catalogs); // Note: we are updating existing snapshot, not receivig a complete new one. Thus we must // ensure incremental updates are done in the correct order. This lock ensures that here. lock (_snapshotLock) { newSnapshot = DependenciesSnapshot.FromChanges( CommonServices.Project.FullPath, _currentSnapshot, changes, catalogs, activeTargetFramework, SnapshotFilters.Select(x => x.Value), SubTreeProviders.Select(x => x.Value), projectItemSpecs, out anyChanges); _currentSnapshot = newSnapshot; } if (anyChanges) { // avoid unnecessary tree updates ScheduleDependenciesUpdate(); } }
public TestableDependenciesViewModelFactory(UnconfiguredProject project, IEnumerable <IProjectDependenciesSubTreeProvider> providers) : base(project) { foreach (var provider in providers) { SubTreeProviders.Add(new Lazy <IProjectDependenciesSubTreeProvider, IOrderPrecedenceMetadataView>( () => { return(provider); }, new TestPrecedenceMetadataView())); } }
/// <summary> /// Returns a dependencies node sub tree provider for given dependency provider type. /// </summary> /// <param name="providerType"> /// Type of the dependnecy. It is expected to be a unique string associated with a provider. /// </param> /// <returns> /// Instance of <see cref="IProjectDependenciesSubTreeProvider"/> or null if there no provider /// for given type. /// </returns> IProjectDependenciesSubTreeProvider IDependenciesGraphProjectContext.GetProvider(string providerType) { if (string.IsNullOrEmpty(providerType)) { return(null); } var lazyProvider = SubTreeProviders.FirstOrDefault(x => providerType.Equals(x.Value.ProviderType, StringComparison.OrdinalIgnoreCase)); if (lazyProvider == null) { return(null); } return(lazyProvider.Value); }
IEnumerable <IProjectDependenciesSubTreeProvider> IDependenciesGraphProjectContext.GetProviders() { return(SubTreeProviders.Select(x => x.Value).ToList()); }