Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ImportChoiceGroup()

MemberMapping System.Xml.Serialization.XmlSchemaImporter.ImportChoiceGroup ( XmlSchemaGroupBase group,
string identifier,
CodeIdentifiers members,
CodeIdentifiers membersScope,
INameScope elementsScope,
string ns,
bool groupRepeats,
ref bool needExplicitOrder,
bool allowDuplicates )
inlineprivate

Definition at line 738 of file XmlSchemaImporter.cs.

739 {
740 NameTable nameTable = new NameTable();
742 {
743 groupRepeats = true;
744 }
745 MemberMapping memberMapping = new MemberMapping();
746 memberMapping.Elements = (ElementAccessor[])nameTable.ToArray(typeof(ElementAccessor));
747 Array.Sort(memberMapping.Elements, new ElementComparer());
749 bool flag = false;
750 bool flag2 = false;
751 Hashtable hashtable = new Hashtable(memberMapping.Elements.Length);
752 for (int i = 0; i < memberMapping.Elements.Length; i++)
753 {
754 ElementAccessor elementAccessor = memberMapping.Elements[i];
755 string fullName = elementAccessor.Mapping.TypeDesc.FullName;
756 object obj = hashtable[fullName];
757 if (obj != null)
758 {
759 flag = true;
760 ElementAccessor elementAccessor2 = (ElementAccessor)obj;
761 if (!flag2 && elementAccessor2.IsNullable != elementAccessor.IsNullable)
762 {
763 flag2 = true;
764 }
765 }
766 else
767 {
768 hashtable.Add(fullName, elementAccessor);
769 }
771 {
772 elementAccessor.Mapping = arrayMapping.TopLevelMapping;
775 }
776 }
777 if (flag2)
778 {
779 memberMapping.TypeDesc = base.Scope.GetTypeDesc(typeof(object));
780 }
781 else
782 {
783 TypeDesc[] array = new TypeDesc[hashtable.Count];
785 for (int j = 0; j < array.Length; j++)
786 {
787 if (!enumerator.MoveNext())
788 {
789 break;
790 }
791 array[j] = ((ElementAccessor)enumerator.Current).Mapping.TypeDesc;
792 }
793 memberMapping.TypeDesc = TypeDesc.FindCommonBaseTypeDesc(array);
794 if (memberMapping.TypeDesc == null)
795 {
796 memberMapping.TypeDesc = base.Scope.GetTypeDesc(typeof(object));
797 }
798 }
799 if (groupRepeats)
800 {
801 memberMapping.TypeDesc = memberMapping.TypeDesc.CreateArrayTypeDesc();
802 }
803 if (membersScope != null)
804 {
805 memberMapping.Name = membersScope.AddUnique(groupRepeats ? "Items" : "Item", memberMapping);
807 }
808 if (flag)
809 {
810 memberMapping.ChoiceIdentifier = new ChoiceIdentifierAccessor();
813 memberMapping.ChoiceIdentifier.MemberIds = new string[memberMapping.Elements.Length];
814 ConstantMapping[] constants = ((EnumMapping)memberMapping.ChoiceIdentifier.Mapping).Constants;
815 for (int k = 0; k < memberMapping.Elements.Length; k++)
816 {
817 memberMapping.ChoiceIdentifier.MemberIds[k] = constants[k].Name;
818 }
819 MemberMapping memberMapping2 = new MemberMapping();
821 memberMapping2.Name = memberMapping.ChoiceIdentifier.MemberName;
822 if (groupRepeats)
823 {
824 memberMapping2.TypeDesc = memberMapping.ChoiceIdentifier.Mapping.TypeDesc.CreateArrayTypeDesc();
825 }
826 else
827 {
828 memberMapping2.TypeDesc = memberMapping.ChoiceIdentifier.Mapping.TypeDesc;
829 }
830 ElementAccessor elementAccessor3 = new ElementAccessor();
833 elementAccessor3.Mapping = memberMapping.ChoiceIdentifier.Mapping;
834 memberMapping2.Elements = new ElementAccessor[1] { elementAccessor3 };
835 if (membersScope != null)
836 {
837 string text2 = (memberMapping.ChoiceIdentifier.MemberName = membersScope.AddUnique(memberMapping.ChoiceIdentifier.MemberName, memberMapping2));
838 string name = (memberMapping2.Name = text2);
841 }
842 }
843 return memberMapping;
844 }
void Add(TKey key, TValue value)
virtual ICollection Values
Definition Hashtable.cs:534
virtual void Add(object key, object? value)
Definition Hashtable.cs:676
EnumMapping ImportEnumeratedChoice(ElementAccessor[] choice, string typeNs, string typeName)
bool GatherGroupChoices(XmlSchemaGroup group, NameTable choiceElements, string identifier, string ns, ref bool needExplicitOrder, bool allowDuplicates)
void AddScopeElements(INameScope scope, ElementAccessor[] elements, ref bool duplicateElements, bool allowDuplicates)
bool IsNeedXmlSerializationAttributes(ArrayMapping arrayMapping)

References System.Collections.Hashtable.Add(), System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Serialization.XmlSchemaImporter.AddScopeElements(), System.array, System.Collections.Hashtable.Count, System.Xml.Dictionary, System.Xml.Serialization.TypeDesc.FindCommonBaseTypeDesc(), System.Xml.Serialization.XmlSchemaImporter.GatherGroupChoices(), System.Collections.Generic.Dictionary< TKey, TValue >.GetEnumerator(), System.Xml.Serialization.XmlSchemaImporter.ImportEnumeratedChoice(), System.Xml.Serialization.XmlSchemaImporter.IsNeedXmlSerializationAttributes(), System.obj, System.Array.Sort(), and System.Collections.Hashtable.Values.

Referenced by System.Xml.Serialization.XmlSchemaImporter.ImportArrayMapping(), System.Xml.Serialization.XmlSchemaImporter.ImportGroup(), System.Xml.Serialization.XmlSchemaImporter.ImportGroupMembers(), and System.Xml.Serialization.XmlSchemaImporter.ImportSubstitutionGroupMember().