Inheritance: ITypeDocumentation
Ejemplo n.º 1
0
        /// <summary>
        /// Creates the requested instance as an asynchronous operation.
        /// </summary>
        /// <param name="memberSymbol">The memberSymbol to pass to the object creation.</param>
        /// <param name="cancellationToken">A <see cref="CancellationToken"/> to use for cancelling the object creation.</param>
        /// <returns>Returns a <see cref="Task{T}"/> which represents the instance creation task.</returns>
        public Task <ITypeDocumentation> Create(ISymbol memberSymbol, CancellationToken cancellationToken)
        {
            var doc = memberSymbol.GetDocumentationCommentXml();

            if (string.IsNullOrWhiteSpace(doc))
            {
                return(Task.FromResult <ITypeDocumentation>(null));
            }

            var xmldoc  = XDocument.Parse(doc);
            var docRoot = xmldoc.Root;

            if (docRoot == null)
            {
                return(Task.FromResult <ITypeDocumentation>(null));
            }

            var summaryElement        = docRoot.Element("summary");
            var summary               = summaryElement == null ? string.Empty : summaryElement.Value.Trim();
            var codeElement           = docRoot.Element("code");
            var code                  = codeElement == null ? string.Empty : codeElement.Value.Trim();
            var exampleElement        = docRoot.Element("example");
            var example               = exampleElement == null ? string.Empty : exampleElement.Value.Trim();
            var remarksElement        = docRoot.Element("remarks");
            var remarks               = remarksElement == null ? string.Empty : remarksElement.Value.Trim();
            var returnsElement        = docRoot.Element("returns");
            var returns               = returnsElement == null ? string.Empty : returnsElement.Value.Trim();
            var typeParameterElements = docRoot.Elements("typeparam");
            var typeConstraints       = GetTypeContraints(memberSymbol);
            var typeParameters        =
                typeParameterElements.Select(
                    x =>
            {
                var name = x.Attribute("name").Value.Trim();
                return(new TypeParameterDocumentation(
                           name,
                           typeConstraints.ContainsKey(name) ? typeConstraints[name] : null,
                           x.Value.Trim()));
            });

            var documentation = new TypeDocumentation(summary, code, example, remarks, returns, typeParameters);

            return(Task.FromResult <ITypeDocumentation>(documentation));
        }