Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit a8d34fe

Browse files
authored
Re-apply Changes in #25562 on if/else fix. (#26285)
1 parent 3cfcacd commit a8d34fe

File tree

2 files changed

+46
-22
lines changed

2 files changed

+46
-22
lines changed

src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3190,7 +3190,7 @@ private void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string
31903190
{
31913191
for (StructMapping derived = mapping.DerivedMappings; derived != null; derived = derived.NextDerivedMapping)
31923192
{
3193-
Writer.Write("else if (");
3193+
Writer.Write("if (");
31943194
WriteQNameEqual("xsiType", derived.TypeName, derived.Namespace);
31953195
Writer.WriteLine(")");
31963196
Writer.Indent++;
@@ -3227,7 +3227,7 @@ private void WriteEnumAndArrayTypes()
32273227
if (m is EnumMapping)
32283228
{
32293229
EnumMapping mapping = (EnumMapping)m;
3230-
Writer.Write("else if (");
3230+
Writer.Write("if (");
32313231
WriteQNameEqual("xsiType", mapping.TypeName, mapping.Namespace);
32323232
Writer.WriteLine(") {");
32333233
Writer.Indent++;
@@ -3250,7 +3250,7 @@ private void WriteEnumAndArrayTypes()
32503250
ArrayMapping mapping = (ArrayMapping)m;
32513251
if (mapping.TypeDesc.HasDefaultConstructor)
32523252
{
3253-
Writer.Write("else if (");
3253+
Writer.Write("if (");
32543254
WriteQNameEqual("xsiType", mapping.TypeName, mapping.Namespace);
32553255
Writer.WriteLine(") {");
32563256
Writer.Indent++;
@@ -3397,10 +3397,10 @@ private void WriteLiteralStructMethod(StructMapping structMapping)
33973397
Writer.Indent--;
33983398
}
33993399
Writer.WriteLine("}");
3400+
Writer.WriteLine("else {");
3401+
Writer.Indent++;
34003402
WriteDerivedTypes(structMapping, !useReflection && !structMapping.TypeDesc.IsRoot, typeName);
34013403
if (structMapping.TypeDesc.IsRoot) WriteEnumAndArrayTypes();
3402-
Writer.WriteLine("else");
3403-
Writer.Indent++;
34043404
if (structMapping.TypeDesc.IsRoot)
34053405
Writer.Write("return ReadTypedPrimitive((");
34063406
else
@@ -3409,7 +3409,9 @@ private void WriteLiteralStructMethod(StructMapping structMapping)
34093409
Writer.WriteLine(")xsiType);");
34103410
Writer.Indent--;
34113411
Writer.WriteLine("}");
3412-
3412+
if (structMapping.TypeDesc.IsRoot)
3413+
Writer.Indent--;
3414+
Writer.WriteLine("}");
34133415
if (structMapping.TypeDesc.IsNullable)
34143416
Writer.WriteLine("if (isNull) return null;");
34153417

@@ -4350,16 +4352,27 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
43504352
ElementAccessor e = elements[j];
43514353
string ns = e.Form == XmlSchemaForm.Qualified ? e.Namespace : "";
43524354
if (!isSequence && e.Any && (e.Name == null || e.Name.Length == 0)) continue;
4353-
if (!firstElement || (!isSequence && count > 0))
4355+
if (!isSequence)
43544356
{
4355-
Writer.Write("else ");
4357+
if (firstElement && count == 0)
4358+
{
4359+
Writer.WriteLine("do {");
4360+
Writer.Indent++;
4361+
}
43564362
}
4357-
else if (isSequence)
4363+
else
43584364
{
4359-
Writer.Write("case ");
4360-
Writer.Write(cases.ToString(CultureInfo.InvariantCulture));
4361-
Writer.WriteLine(":");
4362-
Writer.Indent++;
4365+
if (!firstElement || (!isSequence && count > 0))
4366+
{
4367+
Writer.Write("else ");
4368+
}
4369+
else if (isSequence)
4370+
{
4371+
Writer.Write("case ");
4372+
Writer.Write(cases.ToString(CultureInfo.InvariantCulture));
4373+
Writer.WriteLine(":");
4374+
Writer.Indent++;
4375+
}
43634376
}
43644377
count++;
43654378
firstElement = false;
@@ -4449,6 +4462,10 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44494462
Writer.Write(member.ParamsReadSource);
44504463
Writer.WriteLine(" = true;");
44514464
}
4465+
if (!isSequence)
4466+
{
4467+
Writer.WriteLine("break;");
4468+
}
44524469
Writer.Indent--;
44534470
Writer.WriteLine("}");
44544471
}
@@ -4475,10 +4492,10 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44754492
if (count > 0)
44764493
{
44774494
if (isSequence)
4495+
{
44784496
Writer.WriteLine("default:");
4479-
else
4480-
Writer.WriteLine("else {");
4481-
Writer.Indent++;
4497+
Writer.Indent++;
4498+
}
44824499
}
44834500
WriteMemberElementsElse(anyElement, elementElseString);
44844501
if (count > 0)
@@ -4488,7 +4505,14 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44884505
Writer.WriteLine("break;");
44894506
}
44904507
Writer.Indent--;
4491-
Writer.WriteLine("}");
4508+
if (!isSequence)
4509+
{
4510+
Writer.WriteLine("} while (false);");
4511+
}
4512+
else
4513+
{
4514+
Writer.WriteLine("}");
4515+
}
44924516
}
44934517
}
44944518

src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2919,7 +2919,7 @@ private void WriteDerivedTypes(StructMapping mapping)
29192919
for (StructMapping derived = mapping.DerivedMappings; derived != null; derived = derived.NextDerivedMapping)
29202920
{
29212921
string fullTypeName = derived.TypeDesc.CSharpName;
2922-
Writer.Write("else if (");
2922+
Writer.Write("if (");
29232923
WriteTypeCompare("t", fullTypeName, derived.TypeDesc.UseReflection);
29242924
Writer.WriteLine(") {");
29252925
Writer.Indent++;
@@ -2957,7 +2957,7 @@ private void WriteEnumAndArrayTypes()
29572957
{
29582958
EnumMapping mapping = (EnumMapping)m;
29592959
string fullTypeName = mapping.TypeDesc.CSharpName;
2960-
Writer.Write("else if (");
2960+
Writer.Write("if (");
29612961
WriteTypeCompare("t", fullTypeName, mapping.TypeDesc.UseReflection);
29622962
Writer.WriteLine(") {");
29632963
Writer.Indent++;
@@ -2989,7 +2989,7 @@ private void WriteEnumAndArrayTypes()
29892989
ArrayMapping mapping = m as ArrayMapping;
29902990
if (mapping == null || m.IsSoap) continue;
29912991
string fullTypeName = mapping.TypeDesc.CSharpName;
2992-
Writer.Write("else if (");
2992+
Writer.Write("if (");
29932993
if (mapping.TypeDesc.IsArray)
29942994
WriteArrayTypeCompare("t", fullTypeName, mapping.TypeDesc.ArrayElementTypeDesc.CSharpName, mapping.TypeDesc.UseReflection);
29952995
else
@@ -3059,12 +3059,12 @@ private void WriteStructMethod(StructMapping mapping)
30593059
WriteTypeCompare("t", fullTypeName, mapping.TypeDesc.UseReflection);
30603060
Writer.WriteLine(") {");
30613061
Writer.WriteLine("}");
3062+
Writer.WriteLine("else {");
3063+
Writer.Indent++;
30623064
WriteDerivedTypes(mapping);
30633065
if (mapping.TypeDesc.IsRoot)
30643066
WriteEnumAndArrayTypes();
3065-
Writer.WriteLine("else {");
30663067

3067-
Writer.Indent++;
30683068
if (mapping.TypeDesc.IsRoot)
30693069
{
30703070
Writer.WriteLine("WriteTypedPrimitive(n, ns, o, true);");

0 commit comments

Comments
 (0)