public override JmesPathExpression Accept(ITransformVisitor visitor) { JmesPathExpression[] visitedExpressionsStorage = expressions_; JmesPathExpression[] visitedExpressions = null; for (int i = 0, n = expressions_.Length; i < n; i++) { var expression = expressions_[i]; var visitedExpression = expression.Accept(visitor); // the first time we visited a transformed argument, allocate new // argument storage and copy any preceding untransformed arguments if (expression != visitedExpression && visitedExpressions == null) { visitedExpressions = new JmesPathExpression[n]; visitedExpressionsStorage = visitedExpressions; if (i > 0) { Array.Copy(expressions_, visitedExpressions, i - 1); } } visitedExpressionsStorage[i] = visitedExpression; } // if our visited argument storage array and the one backing this // instance are the same, then no arguments were transformed if (visitedExpressionsStorage == expressions_) { return(visitor.Visit(this)); } return(visitor.Visit(new JmesPathFunctionExpression(name_, visitedExpressionsStorage, function_))); }
public override JmesPathExpression Accept(ITransformVisitor visitor) { var visitedExpression = InnerExpression.Accept(visitor); return(visitor.Visit(visitedExpression == InnerExpression ? this : new Expression(visitedExpression))); }
public sealed override JmesPathExpression Accept(ITransformVisitor visitor) { var left = left_.Accept(visitor); var right = right_.Accept(visitor); return(visitor.Visit(left == left_ && right == right_ ? this : CreateWith(left, right))); }
public override JmesPathExpression Accept(ITransformVisitor visitor) { var anyChanged = false; var visited = new Dictionary <string, JmesPathExpression>(); foreach (var item in dictionary_) { var visitedItem = item.Value.Accept(visitor); visited[item.Key] = visitedItem; anyChanged |= visitedItem != item.Value; } return(visitor.Visit(anyChanged ? new JmesPathMultiSelectHash(visited) : this)); }
public override JmesPathExpression Accept(ITransformVisitor visitor) { var anyChanged = false; var visited = new List <JmesPathExpression>(); foreach (var expression in expressions_) { var visitedExpression = expression.Accept(visitor); visited.Add(visitedExpression); anyChanged |= visitedExpression != expression; } return(visitor.Visit(anyChanged ? new JmesPathMultiSelectList(visited) : this)); }
/// <summary> /// Perform a traversal and possible update of the abstract syntax tree. /// </summary> public virtual JmesPathExpression Accept(ITransformVisitor visitor) => visitor.Visit(this);