Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
 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());
 }