From 8b9792c660d91378aba7b12409795517d0337c02 Mon Sep 17 00:00:00 2001 From: maopeixia Date: Fri, 31 Jul 2020 16:12:11 +0800 Subject: [PATCH] When importing doc from comment xml, we should clean up existing --- mdoc/Mono.Documentation/MDocUpdater.cs | 25 ++++++++++------- mdoc/Mono.Documentation/Updater/DocUtils.cs | 20 ++++++++++++++ .../Updater/MsxdocDocumentationImporter.cs | 2 +- mdoc/mdoc.Test/MDocUpdaterTests.cs | 27 +++++++++++++++++++ .../mdoc.Test/SampleClasses/testImportDoc.xml | 17 ++++++++++++ mdoc/mdoc.Test/mdoc.Test.csproj | 4 +++ 6 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 mdoc/mdoc.Test/SampleClasses/testImportDoc.xml diff --git a/mdoc/Mono.Documentation/MDocUpdater.cs b/mdoc/Mono.Documentation/MDocUpdater.cs index d1df06037..1c1bb9657 100644 --- a/mdoc/Mono.Documentation/MDocUpdater.cs +++ b/mdoc/Mono.Documentation/MDocUpdater.cs @@ -3391,17 +3391,22 @@ private void MakeDocNode (DocsNodeInfo info, IEnumerable } } else - { - if (DocUtils.NeedsOverwrite(e["returns"])) - { - if (CheckRemoveByImporter("returns")) - ClearElement(e, "returns"); - } - if (DocUtils.NeedsOverwrite(e["value"])) + { + var commMemberKeys = new string[] { "returns", "value", "related" }; + for (int i = 0; i < commMemberKeys.Length; i++) { - if (CheckRemoveByImporter("value")) - ClearElement(e, "value"); - } + if (DocUtils.NeedsOverwrite(e[commMemberKeys[i]])) + if (DocUtils.CheckRemoveByImporter(info, commMemberKeys[i], importers, setimporters)) + ClearElement(e, commMemberKeys[i]); + } + + var altMemberKeys = new string[] { "altmember", "seealso" }; + for (int i = 0; i < altMemberKeys.Length; i++) + { + if (DocUtils.NeedsOverwrite(e["altmember"])) + if (DocUtils.CheckRemoveByImporter(info, altMemberKeys[i], importers, setimporters)) + ClearElement(e, "altmember"); + } } if (addremarks) diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs index 224b76389..9bdac474b 100644 --- a/mdoc/Mono.Documentation/Updater/DocUtils.cs +++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs @@ -891,5 +891,25 @@ public static List GetGenericParameters(TypeDefinition type) } return assemblyDelList; } + + public static bool CheckRemoveByImporter(DocsNodeInfo info, string keyName, List DocImports, IEnumerable SetImports) + { + foreach (DocumentationImporter i in DocImports) + { + if (i.CheckRemoveByMapping(info, keyName)) + return true; + } + + if (SetImports != null) + { + foreach (var i in SetImports) + { + if (i.CheckRemoveByMapping(info, keyName)) + return true; + } + } + + return false; + } } } diff --git a/mdoc/Mono.Documentation/Updater/MsxdocDocumentationImporter.cs b/mdoc/Mono.Documentation/Updater/MsxdocDocumentationImporter.cs index 9a9895400..f5ec8b9f5 100644 --- a/mdoc/Mono.Documentation/Updater/MsxdocDocumentationImporter.cs +++ b/mdoc/Mono.Documentation/Updater/MsxdocDocumentationImporter.cs @@ -8,7 +8,7 @@ namespace Mono.Documentation.Updater { - class MsxdocDocumentationImporter : DocumentationImporter + public class MsxdocDocumentationImporter : DocumentationImporter { XmlDocument slashdocs; Dictionary slashdocsMapping = new Dictionary(); diff --git a/mdoc/mdoc.Test/MDocUpdaterTests.cs b/mdoc/mdoc.Test/MDocUpdaterTests.cs index d8dbcfdcd..4e4a117c6 100644 --- a/mdoc/mdoc.Test/MDocUpdaterTests.cs +++ b/mdoc/mdoc.Test/MDocUpdaterTests.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using System.Xml; @@ -156,5 +157,31 @@ private List UpdateXml(string XmlNodeName, MemberReference mi) return returnValue; } + + [Test] + public void Update_ImportDoc_Test() + { + List setimporters = new List(); + List importers = new List(); + var filePath = Path.Combine(Path.GetDirectoryName(this.GetType().Module.Assembly.Location), "SampleClasses\\testImportDoc.xml"); + MsxdocDocumentationImporter importer = new MsxdocDocumentationImporter( + filePath); + setimporters.Add(importer); + + XmlDocument doc = new System.Xml.XmlDocument(); + doc.LoadXml(XmlConsts.internalEllXml); + + var type = GetType(typeof(mdoc.Test2.InternalEIICalss)); + var docEnum = new DocumentationEnumerator(); + + var nodeMember = docEnum.GetDocumentationMembers(doc, type, FrameworkTypeEntry.Empty).FirstOrDefault(t => t.Member.FullName == "System.String mdoc.Test2.InternalEIICalss::Getstring(System.Int32)"); + + var testKeys = new string[] { "returns", "value", "related", "seealso" }; + + for (int i = 0; i < testKeys.Length; i++) + { + Assert.IsTrue(DocUtils.CheckRemoveByImporter(nodeMember, testKeys[i], importers, setimporters)); + } + } } } \ No newline at end of file diff --git a/mdoc/mdoc.Test/SampleClasses/testImportDoc.xml b/mdoc/mdoc.Test/SampleClasses/testImportDoc.xml new file mode 100644 index 000000000..19864dc2b --- /dev/null +++ b/mdoc/mdoc.Test/SampleClasses/testImportDoc.xml @@ -0,0 +1,17 @@ + + + + mdoc.Test + + + + + Extension methods for . + + + 0 + A list of scores. + 222 + + + diff --git a/mdoc/mdoc.Test/mdoc.Test.csproj b/mdoc/mdoc.Test/mdoc.Test.csproj index e7189976a..0b163d962 100644 --- a/mdoc/mdoc.Test/mdoc.Test.csproj +++ b/mdoc/mdoc.Test/mdoc.Test.csproj @@ -160,6 +160,10 @@ SampleClasses\cppcli.dll PreserveNewest + + SampleClasses\testImportDoc.xml + PreserveNewest +