System.Xml.Schema.Compiler.CompileBaseMemberTypes C# (CSharp) Method

CompileBaseMemberTypes() private method

private CompileBaseMemberTypes ( XmlSchemaSimpleType simpleType ) : System.Xml.Schema.XmlSchemaSimpleType[]
simpleType XmlSchemaSimpleType
return System.Xml.Schema.XmlSchemaSimpleType[]
        private XmlSchemaSimpleType[] CompileBaseMemberTypes(XmlSchemaSimpleType simpleType) {
            XmlSchemaSimpleType unionMember;
            ArrayList memberTypeDefinitions = new ArrayList();

            XmlSchemaSimpleTypeUnion mainUnion = (XmlSchemaSimpleTypeUnion)simpleType.Content;

            Array mainMemberTypes = mainUnion.MemberTypes;
            if (mainMemberTypes != null) {
                foreach(XmlQualifiedName memberName in mainMemberTypes) {
                    unionMember = GetSimpleType(memberName);
                    if (unionMember != null) {
                        if (unionMember.Datatype.Variety == XmlSchemaDatatypeVariety.Union) { //union of union
                            CheckUnionType(unionMember, memberTypeDefinitions, simpleType);
                        }
                        else { //its list or atomic
                            memberTypeDefinitions.Add(unionMember);
                        }
                        //Check derivation method of the member that is referenced
                        if ((unionMember.FinalResolved & XmlSchemaDerivationMethod.Union) != 0) {
                            SendValidationEvent(Res.Sch_BaseFinalUnion, simpleType);
                        }
                    }
                    else {
                        throw new XmlSchemaException(Res.Sch_UndeclaredSimpleType, memberName.ToString(), mainUnion);   
                    }
                }
            }

            //Now add the baseTypes that are defined inside the union itself
            XmlSchemaObjectCollection mainBaseTypes = mainUnion.BaseTypes; //TODO check for null
            if (mainBaseTypes != null) {
                foreach(XmlSchemaSimpleType st in mainBaseTypes) {
                    CompileSimpleType(st);
                    if (st.Datatype.Variety == XmlSchemaDatatypeVariety.Union) { //union of union
                        CheckUnionType(st, memberTypeDefinitions, simpleType);
                    }
                    else {  //its list or atomic
                        memberTypeDefinitions.Add(st);
                    }
                }
            }
            //set all types
            mainUnion.SetBaseMemberTypes(memberTypeDefinitions.ToArray(typeof(XmlSchemaSimpleType)) as XmlSchemaSimpleType[]);
            return mainUnion.BaseMemberTypes;
        }
Compiler