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

AddDescendantParticle() private method

private AddDescendantParticle ( List list, XmlQueryCardinality>.Dictionary allTypes, XmlSchemaParticle particle, XmlQueryType filter ) : XmlQueryCardinality
list List
allTypes XmlQueryCardinality>.Dictionary
particle System.Xml.Schema.XmlSchemaParticle
filter XmlQueryType
return XmlQueryCardinality
        private XmlQueryCardinality AddDescendantParticle(List<XmlQueryType> list, Dictionary<XmlQualifiedName, XmlQueryCardinality> allTypes, XmlSchemaParticle particle, XmlQueryType filter) {
            XmlQueryCardinality card = XmlQueryCardinality.None;
            XmlSchemaElement element = particle as XmlSchemaElement;
            if (element != null) {
                // Single element
                XmlQueryType elementType = CreateElementType(element);

                // Add it
                card = AddFilteredPrime(list, elementType, filter);

                // Descend
                card += AddElementOrTextDescendants(list, allTypes, elementType.SchemaType, filter);
            }
            else {
                XmlSchemaAny any = particle as XmlSchemaAny;
                if (any != null) {
                    // Descendants of any
                    card = AddFilteredPrime(list, Element, filter);
                }
                else {
                    XmlSchemaGroupBase group = particle as XmlSchemaGroupBase;
                    if (group.Items.Count != 0) {
                        if (particle is XmlSchemaChoice) {
                            foreach (XmlSchemaParticle p in group.Items) {
                                card |= AddDescendantParticle(list, allTypes, p, filter);
                            }
                        }
                        else { // Sequence and  All
                            foreach (XmlSchemaParticle p in group.Items) {
                                card += AddDescendantParticle(list, allTypes, p, filter);
                            }
                        }
                    }
                }
            }
            return card * CardinalityOfParticle(particle);
        }