public static void CreateNonEqualFilter(this TreeContext context, 
            INode node1,
            INode node2, 
            IFilterGroup parentGroup,
            IDiagInfo diagInfo)
        {
            if (node1.Token.Type != node2.Token.Type)
            {
                return;
            }

            var tuple = new Tuple<IToken, IToken>(node1.Token, node2.Token);
            var reverseTuple = new Tuple<IToken, IToken>(node2.Token, node1.Token);
            if (context.NonEqualFilters.Contains(tuple) || context.NonEqualFilters.Contains(reverseTuple))
            {
                return;
            }

            context.NonEqualFilters.Add(tuple);
            var dep1 = new SingleDependency(node1.Token);
            var dep2 = new SingleDependency(node2.Token);

            var newInfo = new FilterInfo(context.Store.NextId, diagInfo, parentGroup?.FilterInfo.FilterToken);
            var filter = new Filter2<IResolutionContext, IResolutionContext>(dep1, dep2, (x, y) => !x.Equals(y), newInfo);
            context.Filters.Add(filter);
        }
Example #2
0
 protected BaseFilter(FilterInfo filterInfo)
 {
     FilterInfo = filterInfo;
 }
Example #3
0
 public ExistsFilter(IDependency<IEnumerable<IResolutionContext>> dependency, FilterInfo info)
     : base(info)
 {
     this.dependency = dependency;
     Dependencies = new[] { dependency };
 }
Example #4
0
 public Inverter(IFilter filter, FilterInfo info) : base(info)
 {
     this.filter = filter;
 }