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

◆ WriteEncodedStructMethod()

void System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteEncodedStructMethod ( StructMapping structMapping)
inlineprivate

Definition at line 1464 of file XmlSerializationReaderCodeGen.cs.

1465 {
1466 if (structMapping.TypeDesc.IsRoot)
1467 {
1468 return;
1469 }
1470 string text = (string)base.MethodNames[structMapping];
1471 base.Writer.WriteLine();
1472 base.Writer.Write("object");
1473 base.Writer.Write(" ");
1474 base.Writer.Write(text);
1475 base.Writer.Write("(");
1476 base.Writer.WriteLine(") {");
1477 base.Writer.Indent++;
1478 Member[] array;
1479 bool flag;
1480 string fixupMethodName;
1481 if (structMapping.TypeDesc.IsAbstract)
1482 {
1483 base.Writer.Write("throw CreateAbstractTypeException(");
1485 base.Writer.Write(", ");
1487 base.Writer.WriteLine(");");
1488 array = Array.Empty<Member>();
1489 flag = false;
1490 fixupMethodName = null;
1491 }
1492 else
1493 {
1495 MemberMapping[] settableMembers = TypeScope.GetSettableMembers(structMapping);
1496 array = new Member[settableMembers.Length];
1497 for (int i = 0; i < settableMembers.Length; i++)
1498 {
1499 MemberMapping memberMapping = settableMembers[i];
1500 CodeIdentifier.CheckValidIdentifier(memberMapping.Name);
1501 string stringForMember = base.RaCodeGen.GetStringForMember("o", memberMapping.Name, structMapping.TypeDesc);
1503 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
1504 {
1505 member.CheckSpecifiedSource = base.RaCodeGen.GetStringForMember("o", memberMapping.Name + "Specified", structMapping.TypeDesc);
1506 }
1507 if (!memberMapping.IsSequence)
1508 {
1509 member.ParamsReadSource = $"paramsRead[{i}]";
1510 }
1511 array[i] = member;
1512 }
1513 fixupMethodName = "fixup_" + text;
1516 WriteAttributes(array, null, "UnknownNode", "(object)o");
1517 base.Writer.WriteLine("Reader.MoveToElement();");
1518 base.Writer.WriteLine("if (Reader.IsEmptyElement) { Reader.Skip(); return o; }");
1519 base.Writer.WriteLine("Reader.ReadStartElement();");
1521 base.Writer.Indent++;
1522 WriteMemberElements(array, "UnknownNode((object)o);", "UnknownNode((object)o);", null, null, null);
1523 base.Writer.WriteLine("Reader.MoveToContent();");
1525 base.Writer.WriteLine("ReadEndElement();");
1526 base.Writer.WriteLine("return o;");
1527 }
1528 base.Writer.Indent--;
1529 base.Writer.WriteLine("}");
1530 if (flag)
1531 {
1532 WriteFixupMethod(fixupMethodName, array, structMapping.TypeDesc.CSharpName, structMapping.TypeDesc.UseReflection, typed: true, "o");
1533 }
1534 }
void WriteAttributes(Member[] members, Member anyAttribute, string elseCall, string firstParam)
void WriteMemberElements(Member[] members, string elementElseString, string elseString, Member anyElement, Member anyText, string checkTypeHrefsSource)
string GetChoiceIdentifierSource(MemberMapping[] mappings, MemberMapping member)
bool WriteMemberFixupBegin(Member[] members, string fixupMethodName, string source)
void WriteFixupMethod(string fixupMethodName, Member[] members, string typeName, bool useReflection, bool typed, string source)

References System.array, System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Dictionary, System.Xml.Serialization.XmlSerializationReaderCodeGen.GetChoiceIdentifierSource(), System.Xml.Serialization.TypeScope.GetSettableMembers(), System.text, System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteAttributes(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteCreateMapping(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteFixupMethod(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElements(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberFixupBegin(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteParamsRead(), System.Xml.Serialization.XmlSerializationCodeGen.WriteQuotedCSharpString(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteWhileLoopEnd(), and System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteWhileNotLoopStart().

Referenced by System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteStructMethod().