protected override ISyntaxVisitorAction Enter( FieldNode node, IDocumentValidatorContext context) { if (IntrospectionFields.TypeName.Equals(node.Name.Value)) { return(Skip); } if (context.Types.TryPeek(out IType type)) { INamedType namedType = type.NamedType(); if (context.Schema.QueryType == namedType && (IntrospectionFields.Schema.Equals(node.Name.Value) || IntrospectionFields.Type.Equals(node.Name.Value))) { context.Errors.Add(context.IntrospectionNotAllowed(node)); return(Break); } if (namedType is IComplexOutputType ct) { if (ct.Fields.TryGetField(node.Name.Value, out IOutputField? of)) { if (node.SelectionSet is null || node.SelectionSet.Selections.Count == 0 || of.Type.NamedType().IsLeafType()) { return(Skip); } context.OutputFields.Push(of); context.Types.Push(of.Type); return(Continue); } return(Skip); } } context.UnexpectedErrorsDetected = true; return(Skip); }