Browse Source

Add XmlException handling to AddXmlDocumentationTransform

pull/850/head
Siegfried Pammer 8 years ago
parent
commit
ae01bfabb4
  1. 46
      ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs

46
ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs

@ -19,6 +19,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Xml;
using ICSharpCode.Decompiler.CSharp.Syntax; using ICSharpCode.Decompiler.CSharp.Syntax;
using ICSharpCode.Decompiler.Documentation; using ICSharpCode.Decompiler.Documentation;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
@ -34,26 +35,33 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{ {
if (!context.Settings.ShowXmlDocumentation) if (!context.Settings.ShowXmlDocumentation)
return; return;
var xmldoc = XmlDocLoader.LoadDocumentation(context.TypeSystem.ModuleDefinition); try {
if (xmldoc == null) var xmldoc = XmlDocLoader.LoadDocumentation(context.TypeSystem.ModuleDefinition);
return; if (xmldoc == null)
foreach (var entity in rootNode.DescendantsAndSelf.OfType<EntityDeclaration>()) { return;
var symbol = entity.GetSymbol(); foreach (var entity in rootNode.DescendantsAndSelf.OfType<EntityDeclaration>()) {
Mono.Cecil.MemberReference mr; var symbol = entity.GetSymbol();
switch (symbol) { Mono.Cecil.MemberReference mr;
case IMember member: switch (symbol) {
mr = context.TypeSystem.GetCecil(member); case IMember member:
break; mr = context.TypeSystem.GetCecil(member);
case IType type: break;
mr = context.TypeSystem.GetCecil(type.GetDefinition()); case IType type:
break; mr = context.TypeSystem.GetCecil(type.GetDefinition());
default: break;
continue; default:
} continue;
string doc = xmldoc.GetDocumentation(XmlDocKeyProvider.GetKey(mr)); }
if (doc != null) { string doc = xmldoc.GetDocumentation(XmlDocKeyProvider.GetKey(mr));
InsertXmlDocumentation(entity, new StringReader(doc)); 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);
} }
} }

Loading…
Cancel
Save