public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type baseType, bool baseTypeCanBeIndirect)
{
TypeMapping typeMapping = ImportType(typeName, typeof(TypeMapping), baseType, TypeFlags.CanBeElementValue, true);
typeMapping.ReferencedByElement = false;
ElementAccessor accessor = new ElementAccessor();
accessor.IsTopLevelInSchema = true; // false
accessor.Name = typeName.Name;
accessor.Namespace = typeName.Namespace;
accessor.Mapping = typeMapping;
if (typeMapping is SpecialMapping && ((SpecialMapping)typeMapping).NamedAny)
accessor.Any = true;
accessor.IsNullable = typeMapping.TypeDesc.IsNullable;
accessor.Form = XmlSchemaForm.Qualified;
if (accessor.Mapping is StructMapping)
{
MakeDerived((StructMapping)accessor.Mapping, baseType, baseTypeCanBeIndirect);
}
else if (baseType != null)
{
if (accessor.Mapping is ArrayMapping)
{
// in the case of the ArrayMapping we can use the top-level StructMapping, because it does not have base base type
accessor.Mapping = ((ArrayMapping)accessor.Mapping).TopLevelMapping;
MakeDerived((StructMapping)accessor.Mapping, baseType, baseTypeCanBeIndirect);
}
else
{
// Type '{0}' from namespace '{1}' is not a complex type and cannot be used as a {2}.
throw new InvalidOperationException(SR.Format(SR.XmlBadBaseType, typeName.Name, typeName.Namespace, baseType.FullName));
}
}
return new XmlTypeMapping(Scope, accessor);
}