Example #1
0
        public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
        {
            var output          = newGroup();
            var explicitMembers = definition.ExplicitMembers;

            output.AddMembers(input, m => explicitMembers.Contains(m.Name));
            return(output);
        }
Example #2
0
        public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
        {
            var output = newGroup();
            Predicate <MemberType> isMemberTypeDefined = mType => (definition.MemberType & mType) > 0;

            output.AddMembers(input, mType => isMemberTypeDefined((MemberType)mType.Info.MemberType));
            return(output);
        }
        public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
        {
            var output = newGroup();

            output.AddMembers(input, m =>
            {
                var memberDef = m.Info.GetCustomAttribute <CategoryAttribute>();
                return(memberDef != null && memberDef.name == definition.FullPath);
            });
            return(output);
        }
Example #4
0
        public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
        {
            var output     = newGroup();
            var returnType = definition.DataType;

            if (returnType != null)
            {
                output.AddMembers(input, m => m.DataType.IsA(returnType));
            }
            return(output);
        }
Example #5
0
        public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
        {
            var output  = newGroup();
            var pattern = definition.Pattern;

            if (!pattern.IsNullOrEmpty())
            {
                output.AddMembers(input, member => Regex.IsMatch(member.Name, pattern));
            }
            return(output);
        }
        public MembersList Resolve(MembersList input, DefineCategoryAttribute definition)
        {
            var result = new MembersList();

            var defMembers = _defres.Select(r => r.Invoke(input, definition))
                             .Where(g => !g.IsEmpty())
                             .Cast <IEnumerable <MemberInfo> >().ToArray();

            if (!defMembers.IsEmpty())
            {
                switch (definition.Grouping)
                {
                case CategorySetOp.Intersection:
                    result.AddRange(defMembers.Aggregate((g1, g2) => g1.Intersect(g2)));
                    break;

                case CategorySetOp.Union:
                    result.AddRange(defMembers.UnionAll());
                    break;
                }
            }

            // Solve members annotated with CategoryAttribute
            _memres.Invoke(input, definition).Foreach(result.Add);

            // Filter out excluded members
            result.RemoveAll(_excluded.Contains);

            // If this definition's members are exclusive (doesn't allow dups)
            // we maintain a ref to its members to exclude them from other defs
            if (definition.Exclusive)
            {
                _excluded.AddRange(result);
            }

            return(result);
        }
 public abstract MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition);
Example #8
0
 public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition)
 {
     this.definition = definition;
     return(Resolve(input));
 }