Пример #1
0
 protected virtual ISyntaxVisitorAction Leave(
     IValueNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #2
0
 protected virtual ISyntaxVisitorAction Enter(
     ObjectValueNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #3
0
 protected virtual ISyntaxVisitorAction Leave(
     ObjectFieldNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #4
0
 protected virtual ISyntaxVisitorAction Enter(
     SelectionSetNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #5
0
 protected virtual ISyntaxVisitorAction Enter(
     FragmentDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #6
0
 protected virtual ISyntaxVisitorAction Leave(
     SchemaExtensionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #7
0
        protected override ISyntaxVisitorAction Leave(
            ISyntaxNode node,
            ISyntaxVisitorContext context)
        {
            switch (node.Kind)
            {
            case SyntaxKind.Name:
                return(Leave((NameNode)node, context));

            case SyntaxKind.Document:
                return(Leave((DocumentNode)node, context));

            case SyntaxKind.OperationDefinition:
                return(Leave((OperationDefinitionNode)node, context));

            case SyntaxKind.VariableDefinition:
                return(Leave((VariableDefinitionNode)node, context));

            case SyntaxKind.Variable:
                return(Leave((VariableNode)node, context));

            case SyntaxKind.SelectionSet:
                return(Leave((SelectionSetNode)node, context));

            case SyntaxKind.Field:
                return(Leave((FieldNode)node, context));

            case SyntaxKind.Argument:
                return(Leave((ArgumentNode)node, context));

            case SyntaxKind.FragmentSpread:
                return(Leave((FragmentSpreadNode)node, context));

            case SyntaxKind.InlineFragment:
                return(Leave((InlineFragmentNode)node, context));

            case SyntaxKind.FragmentDefinition:
                return(Leave((FragmentDefinitionNode)node, context));

            case SyntaxKind.Directive:
                return(Leave((DirectiveNode)node, context));

            case SyntaxKind.NamedType:
                return(Leave((NamedTypeNode)node, context));

            case SyntaxKind.ListType:
                return(Leave((ListTypeNode)node, context));

            case SyntaxKind.NonNullType:
                return(Leave((NonNullTypeNode)node, context));

            case SyntaxKind.ListValue:
                return(Leave((ListValueNode)node, context));

            case SyntaxKind.ObjectValue:
                return(Leave((ObjectValueNode)node, context));

            case SyntaxKind.ObjectField:
                return(Leave((ObjectFieldNode)node, context));

            case SyntaxKind.BooleanValue:
            case SyntaxKind.EnumValue:
            case SyntaxKind.FloatValue:
            case SyntaxKind.IntValue:
            case SyntaxKind.NullValue:
            case SyntaxKind.StringValue:
                return(Leave((IValueNode)node, context));

            case SyntaxKind.SchemaDefinition:
                return(Leave((SchemaDefinitionNode)node, context));

            case SyntaxKind.OperationTypeDefinition:
                return(Leave((OperationTypeDefinitionNode)node, context));

            case SyntaxKind.ScalarTypeDefinition:
                return(Leave((ScalarTypeDefinitionNode)node, context));

            case SyntaxKind.ObjectTypeDefinition:
                return(Leave((ObjectTypeDefinitionNode)node, context));

            case SyntaxKind.FieldDefinition:
                return(Leave((FieldDefinitionNode)node, context));

            case SyntaxKind.InputValueDefinition:
                return(Leave((InputValueDefinitionNode)node, context));

            case SyntaxKind.InterfaceTypeDefinition:
                return(Leave((InterfaceTypeDefinitionNode)node, context));

            case SyntaxKind.UnionTypeDefinition:
                return(Leave((UnionTypeDefinitionNode)node, context));

            case SyntaxKind.EnumTypeDefinition:
                return(Leave((EnumTypeDefinitionNode)node, context));

            case SyntaxKind.EnumValueDefinition:
                return(Leave((EnumValueDefinitionNode)node, context));

            case SyntaxKind.InputObjectTypeDefinition:
                return(Leave((InputObjectTypeDefinitionNode)node, context));

            case SyntaxKind.DirectiveDefinition:
                return(Leave((DirectiveDefinitionNode)node, context));

            case SyntaxKind.SchemaExtension:
                return(Leave((SchemaExtensionNode)node, context));

            case SyntaxKind.ScalarTypeExtension:
                return(Leave((ScalarTypeExtensionNode)node, context));

            case SyntaxKind.ObjectTypeExtension:
                return(Leave((ObjectTypeExtensionNode)node, context));

            case SyntaxKind.InterfaceTypeExtension:
                return(Leave((InterfaceTypeExtensionNode)node, context));

            case SyntaxKind.UnionTypeExtension:
                return(Leave((UnionTypeExtensionNode)node, context));

            case SyntaxKind.EnumTypeExtension:
                return(Leave((EnumTypeExtensionNode)node, context));

            case SyntaxKind.InputObjectTypeExtension:
                return(Leave((InputObjectTypeExtensionNode)node, context));

            default:
                throw new NotSupportedException(node.GetType().FullName);
            }
        }
Пример #8
0
 protected virtual IEnumerable <ISyntaxNode> GetNodes(
     ISyntaxNode node,
     ISyntaxVisitorContext context) =>
 node.GetNodes();
Пример #9
0
 protected virtual ISyntaxVisitorContext OnBeforeEnter(
     ISyntaxNode node,
     ISyntaxNode?parent,
     IReadOnlyList <ISyntaxNode> ancestors,
     ISyntaxVisitorContext context) =>
 context;
Пример #10
0
 protected override ISyntaxVisitorAction Enter(
     ISyntaxNode node,
     ISyntaxVisitorContext context) =>
 _enter(node, context);
Пример #11
0
 protected override ISyntaxVisitorAction Leave(
     ISyntaxNode node,
     ISyntaxVisitorContext context) =>
 _leave(node, context);
Пример #12
0
 protected virtual ISyntaxVisitorAction Enter(
     EnumTypeExtensionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #13
0
 protected virtual ISyntaxVisitorAction Enter(
     InputObjectTypeDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #14
0
 protected virtual ISyntaxVisitorAction Enter(
     OperationTypeDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #15
0
 protected virtual ISyntaxVisitorAction Leave(
     InterfaceTypeDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #16
0
 protected ISyntaxVisitorContext OnAfterLeave(
     ISyntaxNode node,
     ISyntaxNode?parent,
     IReadOnlyList <ISyntaxNode> ancestors,
     ISyntaxVisitorContext context) =>
 context;
Пример #17
0
 protected virtual ISyntaxVisitorAction Leave(
     DirectiveDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #18
0
        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);
        }
Пример #19
0
 protected virtual ISyntaxVisitorAction Leave(
     InputObjectTypeExtensionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #20
0
 protected virtual ISyntaxVisitorAction Leave(
     ArgumentNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #21
0
 protected virtual ISyntaxVisitorAction Enter(
     VariableDefinitionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #22
0
 protected virtual ISyntaxVisitorAction Leave(
     FragmentSpreadNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #23
0
 protected virtual ISyntaxVisitorAction Enter(
     InlineFragmentNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #24
0
 protected virtual ISyntaxVisitorAction Leave(
     NonNullTypeNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #25
0
 protected virtual ISyntaxVisitorAction Enter(
     DirectiveNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
Пример #26
0
 protected virtual ISyntaxVisitorAction Enter(
     NamedTypeNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;