From ae01bfabb494ac78fe5b47e92b3109a1a40c61be Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 9 Sep 2017 16:27:01 +0200 Subject: [PATCH] Add XmlException handling to AddXmlDocumentationTransform --- .../AddXmlDocumentationTransform.cs | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs b/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs index 85d789f74..0115e0afc 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs @@ -19,6 +19,7 @@ using System; using System.IO; using System.Linq; +using System.Xml; using ICSharpCode.Decompiler.CSharp.Syntax; using ICSharpCode.Decompiler.Documentation; using ICSharpCode.Decompiler.TypeSystem; @@ -34,26 +35,33 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms { if (!context.Settings.ShowXmlDocumentation) return; - var xmldoc = XmlDocLoader.LoadDocumentation(context.TypeSystem.ModuleDefinition); - if (xmldoc == null) - return; - foreach (var entity in rootNode.DescendantsAndSelf.OfType()) { - var symbol = entity.GetSymbol(); - Mono.Cecil.MemberReference mr; - switch (symbol) { - case IMember member: - mr = context.TypeSystem.GetCecil(member); - break; - case IType type: - mr = context.TypeSystem.GetCecil(type.GetDefinition()); - break; - default: - continue; - } - string doc = xmldoc.GetDocumentation(XmlDocKeyProvider.GetKey(mr)); - if (doc != null) { - InsertXmlDocumentation(entity, new StringReader(doc)); + try { + var xmldoc = XmlDocLoader.LoadDocumentation(context.TypeSystem.ModuleDefinition); + if (xmldoc == null) + return; + foreach (var entity in rootNode.DescendantsAndSelf.OfType()) { + var symbol = entity.GetSymbol(); + Mono.Cecil.MemberReference mr; + switch (symbol) { + case IMember member: + mr = context.TypeSystem.GetCecil(member); + break; + case IType type: + mr = context.TypeSystem.GetCecil(type.GetDefinition()); + break; + default: + continue; + } + string doc = xmldoc.GetDocumentation(XmlDocKeyProvider.GetKey(mr)); + if (doc != null) { + InsertXmlDocumentation(entity, new StringReader(doc)); + } } + } catch (XmlException ex) { + string[] msg = (" Exception while reading XmlDoc: " + ex.ToString()).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + var insertionPoint = rootNode.FirstChild; + for (int i = 0; i < msg.Length; i++) + rootNode.InsertChildBefore(insertionPoint, new Comment(msg[i], CommentType.Documentation), Roles.Comment); } }