Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/api-doc-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/mdoc
diff options
context:
space:
mode:
authorJoel Martinez <joelmartinez@gmail.com>2019-08-02 21:19:32 +0300
committerJoel Martinez <joelmartinez@gmail.com>2019-09-03 18:32:24 +0300
commit4ad4855b5ca77557b2030061fab27517e9e36bc6 (patch)
tree65c14fefc4bda9b9cb14dc9c6324e377756c23fc /mdoc
parent571a3cb47e098e9a75cb1a2d9860ac22578a7110 (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.cs19
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++;
}
}