diff options
author | Miguel de Icaza <miguel@gnome.org> | 2015-10-02 00:40:35 +0300 |
---|---|---|
committer | Duncan Mak <duncanm@microsoft.com> | 2016-10-08 03:31:04 +0300 |
commit | 12fc7b34e3c1954c9b7e7cd7d3e64becd045b97a (patch) | |
tree | 1624ffd1d5286def029b2a91149fefc0d03003a4 /mdoc | |
parent | ad44ae86d1f08edc521d2def479e1070955cd907 (diff) |
Merge pull request #2087 from joelmartinez/mdoc-membername-fixup
[mdoc] Now rewriting incorrect `MemberName`.
Diffstat (limited to 'mdoc')
-rw-r--r-- | mdoc/Mono.Documentation/monodocer.cs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/mdoc/Mono.Documentation/monodocer.cs b/mdoc/Mono.Documentation/monodocer.cs index dd59da4c..7d54a289 100644 --- a/mdoc/Mono.Documentation/monodocer.cs +++ b/mdoc/Mono.Documentation/monodocer.cs @@ -1159,6 +1159,16 @@ class MDocUpdater : MDocCommand foreach (DocsNodeInfo info in docEnum.GetDocumentationMembers (basefile, type)) { XmlElement oldmember = info.Node; MemberReference oldmember2 = info.Member; + + if (info.Member != null && info.Node != null) { + // Check for an error condition where the xml MemberName doesn't match the matched member + var memberName = GetMemberName (info.Member); + var memberAttribute = info.Node.Attributes ["MemberName"]; + if (memberAttribute == null || (memberAttribute.Value != memberName && memberAttribute.Value.Split (',').Length != memberName.Split (',').Length)) { + oldmember.SetAttribute ("MemberName", memberName); + } + } + string sig = oldmember2 != null ? memberFormatters [0].GetDeclaration (oldmember2) : null; // Interface implementations and overrides are deleted from the docs @@ -3284,7 +3294,7 @@ class DocumentationEnumerator { string docName = member.MemberName; - string[] docTypeParams = GetTypeParameters (docName); + string[] docTypeParams = GetTypeParameters (docName, member.TypeParameters); // If we're using 'magic types', then we might get false positives ... in those cases, we keep searching MemberReference likelyCandidate = null; @@ -3394,7 +3404,7 @@ class DocumentationEnumerator { return likelyCandidate; } - static string[] GetTypeParameters (string docName) + static string[] GetTypeParameters (string docName, IEnumerable<string> knownParameters) { if (docName [docName.Length-1] != '>') return null; @@ -3411,7 +3421,12 @@ class DocumentationEnumerator { } while (--i >= 0); types.Reverse (); - return types.ToArray (); + var arrayTypes = types.ToArray (); + + if (knownParameters != null && knownParameters.Any () && arrayTypes.Length != knownParameters.Count ()) + return knownParameters.ToArray (); + else + return arrayTypes; } protected static IEnumerable<MemberReference> GetReflectionMembers (TypeDefinition type, string docName) |