public override void Visit(BasicRule visitee) { PathBasedFieldSelector pathSelector = FindPathSelector(visitee.Selector); if (pathSelector == null) { //TODO: Allow other selectors if they are all equal. throw new InvalidOperationException("Self referencing selector requires a path based selector."); } if (SelectorPath == null) { SelectorPath = pathSelector.Path; Alias = visitee.Alias; return; } if (SelectorPath != pathSelector.Path) { throw new InvalidOperationException("Json Rule Tree had multiple different selectors."); } if (Alias == null) { //Note: If Alias is null, we allow the next rule to provide one. Alias = visitee.Alias; return; } if (Alias != visitee.Alias) { //Note: If multiple aliases was found, we defer back to the selector. Alias = SelectorPath; } }
private static PathBasedFieldSelector FindPathSelector(FieldSelector selector) { PathBasedFieldSelector pathSelector = selector as PathBasedFieldSelector; if (pathSelector != null) { return(pathSelector); } AggregateFieldSelector aggregateSelector = selector as AggregateFieldSelector; if (aggregateSelector != null) { return(FindPathSelector(aggregateSelector.Selector)); } return(null); }