System.Xml.Xsl.XmlQueryTypeFactory.AddElementOrTextDescendants C# (CSharp) Method

AddElementOrTextDescendants() private method

private AddElementOrTextDescendants ( List list, XmlQueryCardinality>.Dictionary allTypes, XmlSchemaType sourceSchemaType, XmlQueryType filter ) : XmlQueryCardinality
list List
allTypes XmlQueryCardinality>.Dictionary
sourceSchemaType System.Xml.Schema.XmlSchemaType
filter XmlQueryType
return XmlQueryCardinality
        private XmlQueryCardinality AddElementOrTextDescendants(List<XmlQueryType> list,
            Dictionary<XmlQualifiedName, XmlQueryCardinality> allTypes, XmlSchemaType sourceSchemaType, XmlQueryType filter) {
            XmlQueryCardinality card = XmlQueryCardinality.None;
            if (sourceSchemaType == XmlSchemaComplexType.UntypedAnyType) {
                card = AddFilteredPrime(list, UntypedElement, filter) * XmlQueryCardinality.ZeroOrMore;
                card += AddFilteredPrime(list, Text, filter);
            }
            else if (sourceSchemaType.Datatype != null) {
                // Text is the only child node simple content of complext type
                card = AddFilteredPrime(list, Text, filter, true) * XmlQueryCardinality.ZeroOrOne;
            }
            else {
                // Complex content
                XmlSchemaComplexType complexType = (XmlSchemaComplexType)sourceSchemaType;
                if (complexType.QualifiedName.IsEmpty || !allTypes.TryGetValue(complexType.QualifiedName, out card)) {
                    allTypes[complexType.QualifiedName] = XmlQueryCardinality.ZeroOrMore; // take care of left recursion
                    card = AddDescendantParticle(list, allTypes, complexType.ContentTypeParticle, filter);
                    allTypes[complexType.QualifiedName] = card;  //set correct card
                    if (complexType.ContentType == XmlSchemaContentType.Mixed) {
                        card += AddFilteredPrime(list, Text, filter);
                    }
                }
            }
            return card;
        }