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

◆ WriteElements() [2/2]

void System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteElements ( string source,
string enumSource,
ElementAccessor[] elements,
TextAccessor text,
ChoiceIdentifierAccessor choice,
string arrayName,
bool writeAccessors,
bool isNullable )
inlineprivate

Definition at line 1377 of file XmlSerializationWriterCodeGen.cs.

1378 {
1379 if (elements.Length == 0 && text == null)
1380 {
1381 return;
1382 }
1383 if (elements.Length == 1 && text == null)
1384 {
1385 TypeDesc typeDesc = (elements[0].IsUnbounded ? elements[0].Mapping.TypeDesc.CreateArrayTypeDesc() : elements[0].Mapping.TypeDesc);
1386 if (!elements[0].Any && !elements[0].Mapping.TypeDesc.UseReflection && !elements[0].Mapping.TypeDesc.IsOptionalValue)
1387 {
1388 source = "((" + typeDesc.CSharpName + ")" + source + ")";
1389 }
1391 return;
1392 }
1393 if (isNullable && choice == null)
1394 {
1395 base.Writer.Write("if ((object)(");
1396 base.Writer.Write(source);
1397 base.Writer.Write(") != null)");
1398 }
1399 base.Writer.WriteLine("{");
1400 base.Writer.Indent++;
1401 int num = 0;
1403 ElementAccessor elementAccessor = null;
1404 bool flag = false;
1405 string text2 = choice?.Mapping.TypeDesc.FullName;
1406 foreach (ElementAccessor elementAccessor2 in elements)
1407 {
1408 if (elementAccessor2.Any)
1409 {
1410 num++;
1411 if (elementAccessor2.Name != null && elementAccessor2.Name.Length > 0)
1412 {
1414 }
1415 else if (elementAccessor == null)
1416 {
1418 }
1419 }
1420 else if (choice != null)
1421 {
1422 bool useReflection = elementAccessor2.Mapping.TypeDesc.UseReflection;
1423 string cSharpName = elementAccessor2.Mapping.TypeDesc.CSharpName;
1424 bool useReflection2 = choice.Mapping.TypeDesc.UseReflection;
1425 string text3 = (useReflection2 ? "" : (text2 + ".@")) + FindChoiceEnumValue(elementAccessor2, (EnumMapping)choice.Mapping, useReflection2);
1426 if (flag)
1427 {
1428 base.Writer.Write("else ");
1429 }
1430 else
1431 {
1432 flag = true;
1433 }
1434 base.Writer.Write("if (");
1435 base.Writer.Write(useReflection2 ? base.RaCodeGen.GetStringForEnumLongValue(enumSource, useReflection2) : enumSource);
1436 base.Writer.Write(" == ");
1437 base.Writer.Write(text3);
1438 if (isNullable && !elementAccessor2.IsNullable)
1439 {
1440 base.Writer.Write(" && ((object)(");
1441 base.Writer.Write(source);
1442 base.Writer.Write(") != null)");
1443 }
1444 base.Writer.WriteLine(") {");
1445 base.Writer.Indent++;
1447 string text4 = source;
1448 if (!useReflection)
1449 {
1450 text4 = "((" + cSharpName + ")" + source + ")";
1451 }
1453 base.Writer.Indent--;
1454 base.Writer.WriteLine("}");
1455 }
1456 else
1457 {
1458 bool useReflection3 = elementAccessor2.Mapping.TypeDesc.UseReflection;
1459 TypeDesc typeDesc2 = (elementAccessor2.IsUnbounded ? elementAccessor2.Mapping.TypeDesc.CreateArrayTypeDesc() : elementAccessor2.Mapping.TypeDesc);
1460 string cSharpName2 = typeDesc2.CSharpName;
1461 if (flag)
1462 {
1463 base.Writer.Write("else ");
1464 }
1465 else
1466 {
1467 flag = true;
1468 }
1469 base.Writer.Write("if (");
1471 base.Writer.WriteLine(") {");
1472 base.Writer.Indent++;
1473 string text5 = source;
1474 if (!useReflection3)
1475 {
1476 text5 = "((" + cSharpName2 + ")" + source + ")";
1477 }
1479 base.Writer.Indent--;
1480 base.Writer.WriteLine("}");
1481 }
1482 }
1483 if (num > 0)
1484 {
1485 if (elements.Length - num > 0)
1486 {
1487 base.Writer.Write("else ");
1488 }
1489 string fullName = typeof(XmlElement).FullName;
1490 base.Writer.Write("if (");
1491 base.Writer.Write(source);
1492 base.Writer.Write(" is ");
1493 base.Writer.Write(fullName);
1494 base.Writer.WriteLine(") {");
1495 base.Writer.Indent++;
1496 base.Writer.Write(fullName);
1497 base.Writer.Write(" elem = (");
1498 base.Writer.Write(fullName);
1499 base.Writer.Write(")");
1500 base.Writer.Write(source);
1501 base.Writer.WriteLine(";");
1502 int num2 = 0;
1503 foreach (ElementAccessor item in arrayList)
1504 {
1505 if (num2++ > 0)
1506 {
1507 base.Writer.Write("else ");
1508 }
1509 string text6 = null;
1510 if (choice != null)
1511 {
1512 bool useReflection4 = choice.Mapping.TypeDesc.UseReflection;
1513 text6 = (useReflection4 ? "" : (text2 + ".@")) + FindChoiceEnumValue(item, (EnumMapping)choice.Mapping, useReflection4);
1514 base.Writer.Write("if (");
1515 base.Writer.Write(useReflection4 ? base.RaCodeGen.GetStringForEnumLongValue(enumSource, useReflection4) : enumSource);
1516 base.Writer.Write(" == ");
1517 base.Writer.Write(text6);
1518 if (isNullable && !item.IsNullable)
1519 {
1520 base.Writer.Write(" && ((object)(");
1521 base.Writer.Write(source);
1522 base.Writer.Write(") != null)");
1523 }
1524 base.Writer.WriteLine(") {");
1525 base.Writer.Indent++;
1526 }
1527 base.Writer.Write("if (elem.Name == ");
1529 base.Writer.Write(" && elem.NamespaceURI == ");
1530 WriteQuotedCSharpString(item.Namespace);
1531 base.Writer.WriteLine(") {");
1532 base.Writer.Indent++;
1534 if (choice != null)
1535 {
1536 base.Writer.Indent--;
1537 base.Writer.WriteLine("}");
1538 base.Writer.WriteLine("else {");
1539 base.Writer.Indent++;
1540 base.Writer.WriteLine("// throw Value '{0}' of the choice identifier '{1}' does not match element '{2}' from namespace '{3}'.");
1541 base.Writer.Write("throw CreateChoiceIdentifierValueException(");
1543 base.Writer.Write(", ");
1544 WriteQuotedCSharpString(choice.MemberName);
1545 base.Writer.WriteLine(", elem.Name, elem.NamespaceURI);");
1546 base.Writer.Indent--;
1547 base.Writer.WriteLine("}");
1548 }
1549 base.Writer.Indent--;
1550 base.Writer.WriteLine("}");
1551 }
1552 if (num2 > 0)
1553 {
1554 base.Writer.WriteLine("else {");
1555 base.Writer.Indent++;
1556 }
1557 if (elementAccessor != null)
1558 {
1560 }
1561 else
1562 {
1563 base.Writer.WriteLine("throw CreateUnknownAnyElementException(elem.Name, elem.NamespaceURI);");
1564 }
1565 if (num2 > 0)
1566 {
1567 base.Writer.Indent--;
1568 base.Writer.WriteLine("}");
1569 }
1570 base.Writer.Indent--;
1571 base.Writer.WriteLine("}");
1572 }
1573 if (text != null)
1574 {
1575 bool useReflection5 = text.Mapping.TypeDesc.UseReflection;
1576 string cSharpName3 = text.Mapping.TypeDesc.CSharpName;
1577 if (elements.Length != 0)
1578 {
1579 base.Writer.Write("else ");
1580 base.Writer.Write("if (");
1582 base.Writer.WriteLine(") {");
1583 base.Writer.Indent++;
1584 string source2 = source;
1585 if (!useReflection5)
1586 {
1587 source2 = "((" + cSharpName3 + ")" + source + ")";
1588 }
1590 base.Writer.Indent--;
1591 base.Writer.WriteLine("}");
1592 }
1593 else
1594 {
1595 string source3 = source;
1596 if (!useReflection5)
1597 {
1598 source3 = "((" + cSharpName3 + ")" + source + ")";
1599 }
1601 }
1602 }
1603 if (elements.Length != 0)
1604 {
1605 base.Writer.Write("else ");
1606 if (isNullable)
1607 {
1608 base.Writer.Write(" if ((object)(");
1609 base.Writer.Write(source);
1610 base.Writer.Write(") != null)");
1611 }
1612 base.Writer.WriteLine("{");
1613 base.Writer.Indent++;
1614 base.Writer.Write("throw CreateUnknownTypeException(");
1615 base.Writer.Write(source);
1616 base.Writer.WriteLine(");");
1617 base.Writer.Indent--;
1618 base.Writer.WriteLine("}");
1619 }
1620 base.Writer.Indent--;
1621 base.Writer.WriteLine("}");
1622 }
void WriteInstanceOf(string source, string escapedTypeName, bool useReflection)
void WriteElement(string source, ElementAccessor element, string arrayName, bool writeAccessor)
void WriteChoiceTypeCheck(string source, string fullTypeName, bool useReflection, ChoiceIdentifierAccessor choice, string enumName, TypeDesc typeDesc)
string FindChoiceEnumValue(ElementAccessor element, EnumMapping choiceMapping, bool useReflection)

References System.Any, System.Xml.Serialization.TypeDesc.CreateArrayTypeDesc(), System.Xml.Serialization.TypeDesc.CSharpName, System.Xml.Dictionary, System.Xml.Serialization.XmlSerializationWriterCodeGen.FindChoiceEnumValue(), System.Xml.Serialization.TypeDesc.FullName, System.Xml.Serialization.TypeDesc.IsOptionalValue, System.Xml.Serialization.ElementAccessor.IsUnbounded, System.item, System.Xml.Serialization.Accessor.Mapping, System.source, System.text, System.Xml.Serialization.TypeMapping.TypeDesc, System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteChoiceTypeCheck(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteElement(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteInstanceOf(), System.Xml.Serialization.XmlSerializationCodeGen.WriteQuotedCSharpString(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteText().