in dotnet/CSharpSourceGraphExtraction/Utils/MethodUtils.cs [17:83]
public static (string Summary, string Returns, Dictionary<IParameterSymbol, string> ParameterComments)
GetDocumentationComment(IMethodSymbol methodSymbol, bool recurseToParents=true)
{
var comment = methodSymbol.GetDocumentationCommentXml().Trim();
if (string.IsNullOrWhiteSpace(comment) && recurseToParents)
{
foreach (var parentMethod in AllImplementedMethods(methodSymbol))
{
comment = parentMethod.GetDocumentationCommentXml().Trim();
if (!string.IsNullOrWhiteSpace(comment))
{
break;
}
}
}
if (string.IsNullOrWhiteSpace(comment))
{
return ("", "", null);
}
if (!comment.StartsWith("<member"))
{
comment = "<member>" + comment + "</member>";
}
var xmlDoc = new XmlDocument();
try
{
xmlDoc.LoadXml(comment);
} catch (Exception)
{
return ("", "", null);
}
if (xmlDoc.SelectSingleNode("member") == null)
{
return ("", "", null);
}
var memberXmlNode = xmlDoc.SelectSingleNode("member");
string summary = "";
if (memberXmlNode.SelectSingleNode("summary") != null) {
summary = xmlDoc.SelectSingleNode("member").SelectSingleNode("summary").InnerXml.Trim();
}
var parameterComments = new Dictionary<IParameterSymbol, string>();
var paramNamesToSymbols = methodSymbol.Parameters.ToDictionary(s => s.Name, s => s);
foreach(var paramXmlNode in memberXmlNode.SelectNodes("param"))
{
var paramName = ((XmlNode)paramXmlNode).Attributes["name"].InnerText;
if (paramNamesToSymbols.ContainsKey(paramName))
{
parameterComments.Add(paramNamesToSymbols[paramName], ((XmlNode)paramXmlNode).InnerXml.Trim());
}
}
string returnVal = "";
if (memberXmlNode.SelectSingleNode("returns") != null)
{
returnVal = xmlDoc.SelectSingleNode("member").SelectSingleNode("returns").InnerXml.Trim();
}
return (summary, returnVal, parameterComments);
}