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); }
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); }
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); }
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);
public override MemberGroup Resolve(MemberGroup input, DefineCategoryAttribute definition) { this.definition = definition; return(Resolve(input)); }