未验证 提交 6a7050ea 编写于 作者: S Stephen Toub 提交者: GitHub

Remove unnecessary XmlQualifiedName allocations from XsdBuilder.ProcessElement/Attribute (#67045)

上级 f846c970
......@@ -703,8 +703,10 @@ public BuilderNamespaceManager(XmlNamespaceManager nsMgr, XmlReader reader)
internal override bool ProcessElement(string prefix, string name, string ns)
{
XmlQualifiedName qname = new XmlQualifiedName(name, ns);
if (GetNextState(qname))
name ??= string.Empty;
ns ??= string.Empty;
if (GetNextState(name, ns))
{
Push();
Debug.Assert(_currentEntry.InitFunc != null);
......@@ -715,9 +717,9 @@ internal override bool ProcessElement(string prefix, string name, string ns)
}
else
{
if (!IsSkipableElement(qname))
if (!IsSkipableElement())
{
SendValidationEvent(SR.Sch_UnsupportedElement, qname.ToString());
SendValidationEvent(SR.Sch_UnsupportedElement, XmlQualifiedName.ToString(name, ns));
}
return false;
}
......@@ -726,13 +728,15 @@ internal override bool ProcessElement(string prefix, string name, string ns)
internal override void ProcessAttribute(string prefix, string name, string ns, string value)
{
XmlQualifiedName qname = new XmlQualifiedName(name, ns);
name ??= string.Empty;
ns ??= string.Empty;
if (_currentEntry.Attributes != null)
{
for (int i = 0; i < _currentEntry.Attributes.Length; i++)
{
XsdAttributeEntry a = _currentEntry.Attributes[i];
if (_schemaNames.TokenToQName[(int)a.Attribute].Equals(qname))
if (_schemaNames.TokenToQName[(int)a.Attribute].Equals(name, ns))
{
try
{
......@@ -768,7 +772,7 @@ internal override void ProcessAttribute(string prefix, string name, string ns, s
}
else
{
SendValidationEvent(SR.Sch_UnsupportedAttribute, qname.ToString());
SendValidationEvent(SR.Sch_UnsupportedAttribute, XmlQualifiedName.ToString(name, ns));
}
}
......@@ -2433,14 +2437,14 @@ private void AddParticle(XmlSchemaParticle particle)
}
}
private bool GetNextState(XmlQualifiedName qname)
private bool GetNextState(string name, string ns)
{
if (_currentEntry.NextStates != null)
{
for (int i = 0; i < _currentEntry.NextStates.Length; ++i)
{
int state = (int)_currentEntry.NextStates[i];
if (_schemaNames.TokenToQName[(int)s_schemaEntries[state].Name].Equals(qname))
if (_schemaNames.TokenToQName[(int)s_schemaEntries[state].Name].Equals(name, ns))
{
_nextEntry = s_schemaEntries[state];
return true;
......@@ -2451,7 +2455,7 @@ private bool GetNextState(XmlQualifiedName qname)
return false;
}
private bool IsSkipableElement(XmlQualifiedName qname)
private bool IsSkipableElement()
{
return ((CurrentElement == SchemaNames.Token.XsdDocumentation) ||
(CurrentElement == SchemaNames.Token.XsdAppInfo));
......
......@@ -78,9 +78,11 @@ public override bool Equals([NotNullWhen(true)] object? other)
return true;
}
return other is XmlQualifiedName qName && Name == qName.Name && Namespace == qName.Namespace;
return other is XmlQualifiedName qName && Equals(qName.Name, qName.Namespace);
}
internal bool Equals(string name, string ns) => Name == name && Namespace == ns;
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册