public override Task HandleAsync(
            IProjectVersionedValue <Tuple <IProjectSubscriptionUpdate, IProjectCatalogSnapshot, IProjectCapabilitiesSnapshot> > e,
            IImmutableDictionary <string, IProjectChangeDescription> projectChanges,
            ITargetedProjectContext context,
            bool isActiveContext,
            DependenciesRuleChangeContext ruleChangeContext)
        {
            if (projectChanges.TryGetValue(UnresolvedRuleName, out IProjectChangeDescription unresolvedChanges) &&
                unresolvedChanges.Difference.AnyChanges)
            {
                HandleChangesForRule(
                    unresolvedChanges,
                    ruleChangeContext,
                    context.TargetFramework,
                    resolved: false);
            }

            var caseInsensitiveUnresolvedChanges = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            caseInsensitiveUnresolvedChanges.AddRange(unresolvedChanges.After.Items.Keys);

            if (projectChanges.TryGetValue(ResolvedRuleName, out IProjectChangeDescription resolvedChanges) &&
                resolvedChanges.Difference.AnyChanges)
            {
                HandleChangesForRule(
                    resolvedChanges,
                    ruleChangeContext,
                    context.TargetFramework,
                    resolved: true,
                    unresolvedChanges: caseInsensitiveUnresolvedChanges);
            }

            return(Task.CompletedTask);
        }
예제 #2
0
        public override void Handle(
            IImmutableDictionary <string, IProjectChangeDescription> changesByRuleName,
            ITargetFramework targetFramework,
            DependenciesRuleChangeContext ruleChangeContext)
        {
            var caseInsensitiveUnresolvedChanges = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            if (changesByRuleName.TryGetValue(UnresolvedRuleName, out IProjectChangeDescription unresolvedChanges))
            {
                caseInsensitiveUnresolvedChanges.AddRange(unresolvedChanges.After.Items.Keys);

                if (unresolvedChanges.Difference.AnyChanges)
                {
                    HandleChangesForRule(
                        unresolvedChanges,
                        ruleChangeContext,
                        targetFramework,
                        resolved: false);
                }
            }

            if (changesByRuleName.TryGetValue(ResolvedRuleName, out IProjectChangeDescription resolvedChanges) &&
                resolvedChanges.Difference.AnyChanges)
            {
                HandleChangesForRule(
                    resolvedChanges,
                    ruleChangeContext,
                    targetFramework,
                    resolved: true,
                    unresolvedChanges: caseInsensitiveUnresolvedChanges);
            }
        }
예제 #3
0
        private void HandleChangesForRule(
            IProjectChangeDescription projectChange,
            DependenciesRuleChangeContext ruleChangeContext,
            ITargetFramework targetFramework,
            bool resolved,
            HashSet <string> unresolvedChanges = null)
        {
            Requires.NotNull(targetFramework, nameof(targetFramework));

            foreach (string removedItem in projectChange.Difference.RemovedItems)
            {
                if (PackageDependencyMetadata.TryGetMetadata(
                        removedItem,
                        resolved,
                        properties: projectChange.Before.GetProjectItemProperties(removedItem),
                        unresolvedChanges,
                        targetFramework,
                        TargetFrameworkProvider,
                        out PackageDependencyMetadata metadata))
                {
                    ruleChangeContext.IncludeRemovedChange(targetFramework, ProviderTypeString, metadata.OriginalItemSpec);
                }
            }

            foreach (string changedItem in projectChange.Difference.ChangedItems)
            {
                if (PackageDependencyMetadata.TryGetMetadata(
                        changedItem,
                        resolved,
                        properties: projectChange.After.GetProjectItemProperties(changedItem),
                        unresolvedChanges,
                        targetFramework,
                        TargetFrameworkProvider,
                        out PackageDependencyMetadata metadata))
                {
                    ruleChangeContext.IncludeRemovedChange(targetFramework, ProviderTypeString, metadata.OriginalItemSpec);
                    ruleChangeContext.IncludeAddedChange(targetFramework, metadata.CreateDependencyModel());
                }
            }

            foreach (string addedItem in projectChange.Difference.AddedItems)
            {
                if (PackageDependencyMetadata.TryGetMetadata(
                        addedItem,
                        resolved,
                        properties: projectChange.After.GetProjectItemProperties(addedItem),
                        unresolvedChanges,
                        targetFramework,
                        TargetFrameworkProvider,
                        out PackageDependencyMetadata metadata))
                {
                    ruleChangeContext.IncludeAddedChange(targetFramework, metadata.CreateDependencyModel());
                }
            }
        }
        private void HandleChangesForRule(
            IProjectChangeDescription projectChange,
            DependenciesRuleChangeContext ruleChangeContext,
            ITargetFramework targetFramework,
            bool resolved,
            HashSet <string> unresolvedChanges = null)
        {
            Requires.NotNull(targetFramework, nameof(targetFramework));

            if (targetFramework == null)
            {
                return;
            }

            foreach (string removedItem in projectChange.Difference.RemovedItems)
            {
                IImmutableDictionary <string, string> properties = GetProjectItemProperties(projectChange.Before, removedItem);
                IDependencyModel model = GetDependencyModel(removedItem, resolved,
                                                            properties, projectChange, unresolvedChanges, targetFramework);
                if (model == null)
                {
                    continue;
                }

                ruleChangeContext.IncludeRemovedChange(targetFramework, model);
            }

            foreach (string changedItem in projectChange.Difference.ChangedItems)
            {
                IImmutableDictionary <string, string> properties = GetProjectItemProperties(projectChange.After, changedItem);
                IDependencyModel model = GetDependencyModel(changedItem, resolved,
                                                            properties, projectChange, unresolvedChanges, targetFramework);
                if (model == null)
                {
                    continue;
                }

                ruleChangeContext.IncludeRemovedChange(targetFramework, model);
                ruleChangeContext.IncludeAddedChange(targetFramework, model);
            }

            foreach (string addedItem in projectChange.Difference.AddedItems)
            {
                IImmutableDictionary <string, string> properties = GetProjectItemProperties(projectChange.After, addedItem);
                IDependencyModel model = GetDependencyModel(addedItem, resolved,
                                                            properties, projectChange, unresolvedChanges, targetFramework);
                if (model == null)
                {
                    continue;
                }

                ruleChangeContext.IncludeAddedChange(targetFramework, model);
            }
        }
 public DependencySubscriptionChangedEventArgs(DependenciesRuleChangeContext context)
 {
     Context = context;
 }
예제 #6
0
 public DependencySubscriptionChangedEventArgs(DependenciesRuleChangeContext context)
 {
     ActiveTarget = context.ActiveTarget;
     Catalogs     = context.Catalogs;
     Changes      = context.Changes;
 }