}
}
// get types from "memberTypes" attribute
ArrayList dTValidators = null;
XSSimpleType dv = null;
XSObjectList dvs;
if (union && memberTypes != null && memberTypes.size() > 0) {
int size = memberTypes.size();
dTValidators = new ArrayList(size);
// for each qname in the list
for (int i = 0; i < size; i++) {
// get the type decl
dv = findDTValidator(child, name, (QName)memberTypes.elementAt(i),
XSConstants.DERIVATION_UNION, schemaDoc);
if (dv != null) {
// if it's a union, expand it
if (dv.getVariety() == XSSimpleType.VARIETY_UNION) {
dvs = dv.getMemberTypes();
for (int j = 0; j < dvs.getLength(); j++)
dTValidators.add(dvs.item(j));
} else {
dTValidators.add(dv);
}
}
}
}
// check if there is a child "simpleType"
if (content != null && DOMUtil.getLocalName(content).equals(SchemaSymbols.ELT_SIMPLETYPE)) {
if (restriction || list) {
// it's an error for both "base" and "simpleType" to appear
if (baseTypeName != null) {
reportSchemaError(list ? "src-simple-type.3.a" : "src-simple-type.2.a", null, content);
}
if (baseValidator == null) {
// traverse this child to get the base type
baseValidator = traverseLocal(content, schemaDoc, grammar);
}
// get the next element
content = DOMUtil.getNextSiblingElement(content);
}
else if (union) {
if (dTValidators == null) {
dTValidators = new ArrayList(2);
}
do {
// traverse this child to get the member type
dv = traverseLocal(content, schemaDoc, grammar);
if (dv != null) {
// if it's a union, expand it
if (dv.getVariety() == XSSimpleType.VARIETY_UNION) {
dvs = dv.getMemberTypes();
for (int j = 0; j < dvs.getLength(); j++) {
dTValidators.add(dvs.item(j));
}
}
else {
dTValidators.add(dv);
}