diff options
author | Joel Martinez <joelmartinez@gmail.com> | 2019-08-02 21:19:32 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2019-09-03 18:32:24 +0300 |
commit | 4ad4855b5ca77557b2030061fab27517e9e36bc6 (patch) | |
tree | 65c14fefc4bda9b9cb14dc9c6324e377756c23fc /mdoc | |
parent | 571a3cb47e098e9a75cb1a2d9860ac22578a7110 (diff) |
Will no longer create a new member, if the docid has been seen.
The result will be that mdoc will no longer create multiple nodes for members that differ by return type, or by constant value (like enums)
Diffstat (limited to 'mdoc')
-rw-r--r-- | mdoc/Mono.Documentation/MDocUpdater.cs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/mdoc/Mono.Documentation/MDocUpdater.cs b/mdoc/Mono.Documentation/MDocUpdater.cs index fe4d1efd..7647fa92 100644 --- a/mdoc/Mono.Documentation/MDocUpdater.cs +++ b/mdoc/Mono.Documentation/MDocUpdater.cs @@ -47,6 +47,7 @@ namespace Mono.Documentation string since; + static readonly DocIdFormatter docIdFormatter = new DocIdFormatter(); static readonly MemberFormatter docTypeFormatter = new DocTypeMemberFormatter (); static readonly MemberFormatter filenameFormatter = new FileNameMemberFormatter (); @@ -1482,6 +1483,7 @@ namespace Mono.Documentation { Console.WriteLine (message + ": " + type.FullName); StringToXmlNodeMap seenmembers = new StringToXmlNodeMap (); + StringToXmlNodeMap seenmembersdocid = new StringToXmlNodeMap(); // Update type metadata UpdateType (basefile.DocumentElement, type, typeEntry); @@ -1614,17 +1616,21 @@ namespace Mono.Documentation memberSet.Add (info.Member.FullName); // get all apistyles of sig from info.Node - var styles = oldmember.GetElementsByTagName ("MemberSignature").Cast<XmlElement> () + var sigs = oldmember.GetElementsByTagName("MemberSignature").Cast<XmlElement>().ToArray(); + var styles = sigs .Where (x => x.GetAttribute ("Language") == "ILAsm" && !seenmembers.ContainsKey (x.GetAttribute ("Value"))) .Select (x => x.GetAttribute ("Value")); + var docidstyles = sigs + .Where(x => x.GetAttribute("Language") == "DocId" && !seenmembersdocid.ContainsKey(x.GetAttribute("Value"))) + .Select(x => x.GetAttribute("Value")); typeEntry.ProcessMember (info.Member); foreach (var stylesig in styles) - { - seenmembers.Add (stylesig, oldmember); - } + seenmembers.Add(stylesig, oldmember); + foreach (var stylesig in docidstyles) + seenmembersdocid.Add(stylesig, oldmember); if (oldmember.HasAttribute("ToDelete")) { @@ -1649,6 +1655,9 @@ namespace Mono.Documentation string sig = memberFormatters[1].GetDeclaration (m); if (sig==null || seenmembers.ContainsKey (sig)) return false; + var docidsig = docIdFormatter.GetDeclaration(m); + if (seenmembersdocid.ContainsKey(docidsig ?? "")) return false; + // Verify that the member isn't an explicitly implemented // member of an internal interface, in which case we shouldn't return true. MethodDefinition methdef = null; @@ -1696,7 +1705,7 @@ namespace Mono.Documentation memberSet.Add (m.FullName); var node = mm.SelectSingleNode("MemberSignature/@Value") ?? mm.SelectSingleNode("MemberSignature/@Usage"); - Console.WriteLine ("Member Added: " + node.InnerText); + Console.WriteLine ("Member Added: " + (node?.InnerText ?? m.FullName)); additions++; } } |