protected virtual ISelectionVisitorAction VisitChildren( IOutputField field, TContext context) { IOutputType type = field.Type; SelectionSetNode?selectionSet = context.SelectionSetNodes.Peek(); INamedType namedType = type.NamedType(); if (namedType.IsAbstractType()) { IReadOnlyList <ObjectType> possibleTypes = context.Context.Schema.GetPossibleTypes(field.Type.NamedType()); foreach (var possibleType in possibleTypes) { ISelectionVisitorAction result = VisitObjectType(field, possibleType, selectionSet, context); if (result != Continue) { return(result); } } } else if (namedType is ObjectType a) { return(VisitObjectType(field, a, selectionSet, context)); } return(DefaultAction); }
private IEnumerable <IType> GetPossibleTypes(ISchema schema, INamedType type) { if (type.IsAbstractType()) { return(schema.GetPossibleTypes(type)); } return(null); }