public bool Enter( FilterOperationField field, ObjectFieldNode node, IQueryableFilterVisitorContext context, out ISyntaxVisitorAction action) { if (field.Operation.Kind == FilterOperationKind.ArraySome || field.Operation.Kind == FilterOperationKind.ArrayNone || field.Operation.Kind == FilterOperationKind.ArrayAll) { MemberExpression nestedProperty = Expression.Property( context.GetInstance(), field.Operation.Property); context.PushInstance(nestedProperty); Type closureType = GetTypeFor(field.Operation); context.AddClosure(closureType); action = SyntaxVisitor.Continue; return(true); } action = SyntaxVisitor.Skip; return(false); }
public SyntaxVisitor( ISyntaxVisitorAction defaultResult, SyntaxVisitorOptions options = default) { DefaultAction = defaultResult; _options = options; }
protected override IDocumentValidatorContext OnAfterEnter( ISyntaxNode node, ISyntaxNode?parent, IDocumentValidatorContext context, ISyntaxVisitorAction action) { if (action.IsContinue()) { context.Path.Push(node); } return(context); }
public bool FilterFieldEnter( FilterOperationField field, ObjectFieldNode node, IQueryableFilterVisitorContext context, out ISyntaxVisitorAction action) { if (fieldEnterHandler == null) { throw new InvalidOperationException(); } fieldEnterCallCounter++; return(fieldEnterHandler(field, node, context, out action)); }
protected override ISyntaxVisitorAction Leave( ObjectFieldNode node, TContext context) { ISyntaxVisitorAction result = Continue; if (context.Fields.Peek() is ISortField field) { result = OnFieldLeave(context, field, node); } base.Leave(node, context); return(result); }
public bool Enter( FilterOperationField field, ObjectFieldNode node, IQueryableFilterVisitorContext context, out ISyntaxVisitorAction action) { if (field.Operation.Kind == FilterOperationKind.Object) { MemberExpression nestedProperty = Expression.Property( context.GetInstance(), field.Operation.Property); context.PushInstance(nestedProperty); action = SyntaxVisitor.Continue; return(true); } action = SyntaxVisitor.SkipAndLeave; return(false); }
protected SyntaxWalker(ISyntaxVisitorAction defaultResult) : base(defaultResult) { }
public SyntaxVisitor( ISyntaxVisitorAction defaultResult, SyntaxVisitorOptions options = default) : base(defaultResult, options) { }
public static bool IsContinue(this ISyntaxVisitorAction action) { return(action.Kind == SyntaxVisitorActionKind.Continue); }
public static bool IsBreak(this ISyntaxVisitorAction action) { return(action.Kind == SyntaxVisitorActionKind.Break); }
public static bool IsSkip(this ISyntaxVisitorAction action) { return(action.Kind == SyntaxVisitorActionKind.Skip); }
public ISyntaxVisitorAction Visit( ISyntaxNode node, ISyntaxVisitorContext context) { var levels = new List <List <ISyntaxNode> >(); List <ISyntaxNode> ancestors = _listPool.Get(); List <ISyntaxNode> root = _listPool.Get(); ISyntaxVisitorContext localContext = context; int index = 0; root.Push(node); levels.Push(root); ISyntaxNode? parent = null; ISyntaxVisitorAction result = DefaultAction; while (levels.Count > 0) { bool isLeaving = levels[index].Count == 0; ISyntaxNode?current; if (isLeaving) { if (index == 0) { break; } _listPool.Return(levels.Pop()); current = ancestors.Pop(); ancestors.TryPeek(out parent); result = Leave(current, localContext); localContext = OnAfterLeave(current, parent, ancestors, localContext); index--; } else { current = levels[index].Pop(); localContext = OnBeforeEnter(current, parent, ancestors, localContext); result = Enter(current, localContext); if (result is ContinueSyntaxVisitorAction) { List <ISyntaxNode> nextLevel = _listPool.Get(); nextLevel.AddRange(GetNodes(current, localContext)); levels.Push(nextLevel); } else if (result is SkipSyntaxVisitorAction) { levels.Push(_empty); } parent = current; ancestors.Push(current); index++; } if (result is BreakSyntaxVisitorAction) { break; } } if (levels.Count > 0) { for (int i = 0; i < levels.Count; i++) { _listPool.Return(levels[i]); } } _listPool.Return(ancestors); return(result); }
public SyntaxVisitor(ISyntaxVisitorAction defaultResult) { DefaultAction = defaultResult; }
protected SyntaxWalker( ISyntaxVisitorAction defaultResult, SyntaxVisitorOptions options = default) : base(defaultResult, options) { }
public SyntaxVisitor(ISyntaxVisitorAction defaultResult) : base(defaultResult) { }