Skip to content

Commit

Permalink
support for XmlEnumAttribute - code optimization from PR discussion
Browse files Browse the repository at this point in the history
  • Loading branch information
edgridin committed Jan 8, 2024
1 parent 8f6f09f commit b5de0fb
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions src/SoapCore/Meta/MetaBodyWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -462,27 +462,29 @@ private void AddTypes(XmlDictionaryWriter writer)
writer.WriteStartElement("restriction", Namespaces.XMLNS_XSD);
writer.WriteAttributeString("base", $"{_xmlNamespaceManager.LookupPrefix(Namespaces.XMLNS_XSD)}:string");

var membersWithCustomNames = toBuild.GetMembersWithAttribute<XmlEnumAttribute>();
foreach (var value in Enum.GetNames(toBuild))
var membersWithCustomNames = from n in Enum.GetNames(toBuild)
join m in toBuild.GetMembers() on n equals m.Name
let ca = m.CustomAttributes.FirstOrDefault(ca => ca.AttributeType == typeof(XmlEnumAttribute))
select new
{
m.Name,
CustomName =
(ca?
.ConstructorArguments?
.FirstOrDefault()
.Value
??
ca?
.NamedArguments?
.FirstOrDefault(a => a.MemberName == "Name")
.TypedValue
.Value)?
.ToString()
};
foreach (var member in membersWithCustomNames)
{
var xmlEnumAttribute = membersWithCustomNames
.FirstOrDefault(m => m.Name == value)?
.CustomAttributes
.FirstOrDefault(c => c.AttributeType == typeof(XmlEnumAttribute));
var nameFromAttribute = (xmlEnumAttribute?
.ConstructorArguments?
.FirstOrDefault()
.Value
??
xmlEnumAttribute?
.NamedArguments?
.FirstOrDefault(a => a.MemberName == "Name")
.TypedValue
.Value)?
.ToString();

writer.WriteStartElement("enumeration", Namespaces.XMLNS_XSD);
writer.WriteAttributeString("value", nameFromAttribute ?? value);
writer.WriteAttributeString("value", member.CustomName ?? member.Name);
writer.WriteEndElement(); // enumeration
}

Expand Down

0 comments on commit b5de0fb

Please sign in to comment.