public static()

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);            
        }