public override int Transform([NotNull] GlobalContext globalContext, Ignore Ignore, [NotNull] TransformOptions transformOptions, [NotNull][ItemNotNull] IEnumerable <Dependency> dependencies, [NotNull] List <Dependency> transformedDependencies) { var leftMatches = new HashSet <Item>(); var rightMatches = new HashSet <Item>(); int n = 0; bool ignoreCase = globalContext.IgnoreCase; foreach (var d in dependencies.Where(d => d.IsMarkerMatch(transformOptions.Matches, transformOptions.Excludes))) { leftMatches.Add(d.UsingItem); rightMatches.Add(d.UsedItem); if (transformOptions.ClearDependency) { d.ClearMarkers(); } else { d.UnionWithMarkers(transformOptions.MarkersToAddOnDep); d.RemoveMarkers(transformOptions.MarkersToRemoveOnDep, ignoreCase); } if (transformOptions.ResetBad) { d.ResetBad(); } if (transformOptions.ResetQuestionable) { d.ResetQuestionable(); } n++; } Log.WriteInfo($"Marked {n} dependencies"); ReadOnlyMarkerSet markersToAddOnLeftMarkerSet = new ReadOnlyMarkerSet(ignoreCase, transformOptions.MarkersToAddOnLeft); ReadOnlyMarkerSet markersToAddOnRightMarkerSet = new ReadOnlyMarkerSet(ignoreCase, transformOptions.MarkersToAddOnRight); // Items are modified afterwards - match loop above uses unchanged values foreach (var left in leftMatches) { MarkItem(transformOptions.ClearLeft, left, markersToAddOnLeftMarkerSet, transformOptions.MarkerPatternsToRemoveOnLeft, ignoreCase); } foreach (var right in rightMatches) { MarkItem(transformOptions.ClearRight, right, markersToAddOnRightMarkerSet, transformOptions.MarkerPatternsToRemoveOnRight, ignoreCase); } transformedDependencies.AddRange(dependencies); return(Program.OK_RESULT); }
protected ReadOnlyItem([NotNull] ItemType type, string[] values) : base(type, values) { _markerSet = new ReadOnlyMarkerSet(type.IgnoreCase, markers: Enumerable.Empty <string>()); }