private TypeMapping ImportType(XmlQualifiedName name, Type desiredMappingType, Type baseType, TypeFlags flags, bool addref)
{
if (name.Name == Soap.UrType && name.Namespace == XmlSchema.Namespace)
return ImportRootMapping();
object type = FindType(name, flags);
TypeMapping mapping = (TypeMapping)ImportedMappings[type];
if (mapping != null && desiredMappingType.IsAssignableFrom(mapping.GetType()))
return mapping;
if (addref)
AddReference(name, TypesInUse, SR.XmlCircularTypeReference);
if (type is XmlSchemaComplexType)
{
mapping = ImportType((XmlSchemaComplexType)type, name.Namespace, name.Name, desiredMappingType, baseType, flags);
}
else if (type is XmlSchemaSimpleType)
mapping = ImportDataType((XmlSchemaSimpleType)type, name.Namespace, name.Name, baseType, flags, false);
else
throw new InvalidOperationException(SR.XmlInternalError);
if (addref && name.Namespace != XmlSchema.Namespace)
RemoveReference(name, TypesInUse);
return mapping;
}