private void ApplyParameters(OpenApiOperation operation, MethodInfo methodInfo)
        {
            if (methodInfo != null)
            {
                var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo);
                foreach (var parameter in methodInfo.GetParameters())
                {
                    if (!String.IsNullOrEmpty(parameter.Name))
                    {
                        var paramNode = _xmlNavigator.SelectSingleNode(
                            $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameter.Name}']");

                        if (paramNode != null)
                        {
                            var humanizedDescription = XmlCommentsTextHelper.Humanize(paramNode.InnerXml);

                            var operationParameter = operation.Parameters
                                                     .FirstOrDefault(x => x.Name == parameter.Name);

                            if (operationParameter != null)
                            {
                                operationParameter.Description = humanizedDescription;
                            }
                        }
                    }
                }
            }
        }
        private bool TryApplyMethodTags(OpenApiOperation operation, MethodInfo methodInfo)
        {
            var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo);
            var methodNode       = _xmlNavigator.SelectSingleNode($"/doc/members/member[@name='{methodMemberName}']");

            if (methodNode == null)
            {
                return(false);
            }

            var summaryNode = methodNode.SelectSingleNode("summary");

            if (summaryNode != null)
            {
                operation.Summary = XmlCommentsTextHelper.Humanize(summaryNode.InnerXml);
            }

            var remarksNode = methodNode.SelectSingleNode("remarks");

            if (remarksNode != null)
            {
                operation.Description = XmlCommentsTextHelper.Humanize(remarksNode.InnerXml);
            }

            var responseNodes = methodNode.Select("response");

            ApplyResponseTags(operation, responseNodes);

            return(true);
        }
        private void ApplyParamTags(OpenApiParameter parameter, ParameterInfo parameterInfo)
        {
            if (!(parameterInfo.Member is MethodInfo methodInfo))
            {
                return;
            }

            // If method is from a constructed generic type, look for comments from the generic type method
            var targetMethod = methodInfo.DeclaringType.IsConstructedGenericType
                ? methodInfo.GetUnderlyingGenericTypeMethod()
                : methodInfo;

            if (targetMethod == null)
            {
                return;
            }

            var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(targetMethod);
            var paramNode        = _xmlNavigator.SelectSingleNode(
                $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']");

            if (paramNode != null)
            {
                parameter.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml);

                var example = paramNode.GetAttribute("example", "");
                if (!string.IsNullOrEmpty(example))
                {
                    parameter.Example = JsonMapper.CreateFromJson(example);
                }
            }
        }
        public void GetMemberNameForMethod_ReturnsCorrectXmlCommentsMemberName_ForGivenMethodInfo(
            Type declaringType,
            string name,
            string expectedMemberName)
        {
            var methodInfo = declaringType.GetMethod(name);

            var memberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo);

            _output.WriteLine(expectedMemberName);
            _output.WriteLine(memberName);
            Assert.Equal(expectedMemberName, memberName);
        }
Ejemplo n.º 5
0
        private static void Populate_MethodParams(XPathNavigator rawRoot, XPathNavigator newPathMembers, MergeArgType type)
        {
            /*
             * <member name="M:DataContract.IService2Async.Call3Async(DataContract.CallObj,System.String)">
             *  <summary>
             *  Call3Async des
             *  </summary>
             *  <param name="obj">obj des</param>
             *  <param name="s1">s1 des</param>
             *  <returns></returns>
             * </member>
             *
             * ->
             *
             * <member name="T:DataContract.CallObjXXX.obj">   //ref obj will ignore the summary
             *  <summary>
             *  obj des
             *  </summary>
             * </member>
             * <member name="T:DataContract.CallObjXXX.s1">
             *  <summary>
             *  s1 des
             *  </summary>
             * </member>
             */

            var methodStr = XmlCommentsNodeNameHelper.GetMemberNameForMethod(type.MethodInfo);

            foreach (var p in type.MethodInfo.GetParameters())
            {
                var pPath = rawRoot.SelectSingleNode($"/doc/members/member[@name='{methodStr}']/param[@name='{p.Name}']");
                var prop  = type.TypeWithoutPathQueryStream !.GetProperties().FirstOrDefault(i => i.Name == p.Name);
                if (pPath != null && prop != null)
                {
                    var str = XmlCommentsNodeNameHelper.GetMemberNameForFieldOrProperty(prop);
                    newPathMembers.AppendChild(GetXml(str, pPath.Value));
                }
            }
        }