private void SetArrayMappingType(ArrayMapping mapping)
{
string typeName;
string str2;
TypeMapping mapping2;
bool flag = false;
if (mapping.Elements.Length == 1)
{
mapping2 = mapping.Elements[0].Mapping;
}
else
{
mapping2 = null;
}
if (mapping2 is EnumMapping)
{
str2 = mapping2.Namespace;
typeName = mapping2.TypeName;
}
else if (mapping2 is PrimitiveMapping)
{
str2 = mapping2.TypeDesc.IsXsdType ? "http://www.w3.org/2001/XMLSchema" : "http://microsoft.com/wsdl/types/";
typeName = mapping2.TypeDesc.DataType.Name;
flag = true;
}
else if (mapping2 is StructMapping)
{
if (mapping2.TypeDesc.IsRoot)
{
str2 = "http://www.w3.org/2001/XMLSchema";
typeName = "anyType";
flag = true;
}
else
{
str2 = mapping2.Namespace;
typeName = mapping2.TypeName;
}
}
else
{
if (!(mapping2 is ArrayMapping))
{
throw new InvalidOperationException(Res.GetString("XmlInvalidSoapArray", new object[] { mapping.TypeDesc.FullName }));
}
str2 = mapping2.Namespace;
typeName = mapping2.TypeName;
}
typeName = CodeIdentifier.MakePascal(typeName);
string str3 = "ArrayOf" + typeName;
string str4 = flag ? this.defaultNs : str2;
int num = 1;
TypeMapping mapping3 = (TypeMapping)this.types[str3, str4];
while (mapping3 != null)
{
if (mapping3 is ArrayMapping)
{
ArrayMapping mapping4 = (ArrayMapping)mapping3;
if (AccessorMapping.ElementsMatch(mapping4.Elements, mapping.Elements))
{
break;
}
}
str3 = typeName + num.ToString(CultureInfo.InvariantCulture);
mapping3 = (TypeMapping)this.types[str3, str4];
num++;
}
mapping.Namespace = str4;
mapping.TypeName = str3;
}