public static void AssignFilter(this TreeContext context, IFilter filter) { var finalFilter = context.GetFinalFilter(filter); var node = context.GetGroupNode(filter as IFilterGroup); if (node != null) { context.AssignFilterToNode(finalFilter, node); return; } var group = context.GetParentGroup(filter); if (group == null || context.IsFilterAbsorbed(filter, group)) { context.AssignFilterToNode(finalFilter, context.GetAssignmentNode(filter)); } else { group.Filters.Add(finalFilter); } }