예제 #1
0
        public static string GetCommentIdForType(Type type)
        {
            StringBuilder builder = new StringBuilder("T:");

            XmlCommentsIdHelper.AppendFullTypeName(type, builder, false);
            return(builder.ToString());
        }
예제 #2
0
        public void Apply(Schema model, ModelFilterContext context)
        {
            XPathNavigator navigator;

            lock (this._xmlDoc)
                navigator = this._xmlDoc.CreateNavigator();
            string         commentIdForType = XmlCommentsIdHelper.GetCommentIdForType(context.SystemType);
            XPathNavigator xpathNavigator   = navigator.SelectSingleNode(string.Format("/doc/members/member[@name='{0}']", (object)commentIdForType));

            if (xpathNavigator != null)
            {
                XPathNavigator node = xpathNavigator.SelectSingleNode("summary");
                if (node != null)
                {
                    model.description = node.ExtractContent();
                }
            }
            if (model.properties == null)
            {
                return;
            }
            foreach (KeyValuePair <string, Schema> property1 in (IEnumerable <KeyValuePair <string, Schema> >)model.properties)
            {
                JsonProperty property2 = ((KeyedCollection <string, JsonProperty>)context.JsonObjectContract.get_Properties())[property1.Key];
                if (property2 != null)
                {
                    ApplyXmlTypeComments.ApplyPropertyComments(navigator, property1.Value, property2.PropertyInfo());
                }
            }
        }
        public void Apply(Schema model, ModelFilterContext context)
        {
            var commentId = XmlCommentsIdHelper.GetCommentIdForType(context.SystemType);
            var typeNode  = _navigator.SelectSingleNode(string.Format(MemberXPath, commentId));

            if (typeNode != null)
            {
                var summaryNode = typeNode.SelectSingleNode(SummaryTag);
                if (summaryNode != null)
                {
                    model.description = summaryNode.ExtractContent();
                }
            }

            if (model.properties != null)
            {
                foreach (var entry in model.properties)
                {
                    var jsonProperty = context.JsonObjectContract.Properties[entry.Key];
                    if (jsonProperty == null)
                    {
                        continue;
                    }

                    ApplyPropertyComments(entry.Value, jsonProperty.PropertyInfo());
                }
            }
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var reflectedActionDescriptor = apiDescription.ActionDescriptor as ReflectedHttpActionDescriptor;

            if (reflectedActionDescriptor == null)
            {
                return;
            }

            var commentId  = XmlCommentsIdHelper.GetCommentIdForMethod(reflectedActionDescriptor.MethodInfo);
            var methodNode = _navigator.SelectSingleNode(string.Format(MemberXPath, commentId));

            if (methodNode == null)
            {
                return;
            }

            var summaryNode = methodNode.SelectSingleNode(SummaryTag);

            if (summaryNode != null)
            {
                operation.summary = summaryNode.ExtractContent();
            }

            var remarksNode = methodNode.SelectSingleNode(RemarksTag);

            if (remarksNode != null)
            {
                operation.description = remarksNode.ExtractContent();
            }

            ApplyParamComments(operation, methodNode, reflectedActionDescriptor.MethodInfo);

            ApplyResponseComments(operation, methodNode);
        }
예제 #5
0
        public static string GetCommentIdForProperty(PropertyInfo propertyInfo)
        {
            StringBuilder builder = new StringBuilder("P:");

            XmlCommentsIdHelper.AppendFullTypeName(propertyInfo.DeclaringType, builder, false);
            builder.Append(".");
            XmlCommentsIdHelper.AppendPropertyName(propertyInfo, builder);
            return(builder.ToString());
        }
예제 #6
0
        public static string GetCommentIdForMethod(MethodInfo methodInfo)
        {
            StringBuilder builder = new StringBuilder("M:");

            XmlCommentsIdHelper.AppendFullTypeName(methodInfo.DeclaringType, builder, false);
            builder.Append(".");
            XmlCommentsIdHelper.AppendMethodName(methodInfo, builder);
            return(builder.ToString());
        }
예제 #7
0
 private static void AppendFullTypeName(
     Type type,
     StringBuilder builder,
     bool expandGenericArgs = false)
 {
     if (type.Namespace != null)
     {
         builder.Append(type.Namespace);
         builder.Append(".");
     }
     XmlCommentsIdHelper.AppendTypeName(type, builder, expandGenericArgs);
 }
예제 #8
0
 private static void AppendTypeName(Type type, StringBuilder builder, bool expandGenericArgs)
 {
     if (type.IsNested)
     {
         XmlCommentsIdHelper.AppendTypeName(type.DeclaringType, builder, false);
         builder.Append(".");
     }
     builder.Append(type.Name);
     if (!expandGenericArgs)
     {
         return;
     }
     XmlCommentsIdHelper.ExpandGenericArgsIfAny(type, builder);
 }
예제 #9
0
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var reflectedActionDescriptor = apiDescription.ActionDescriptor as ReflectedHttpActionDescriptor;

            if (reflectedActionDescriptor == null)
            {
                return;
            }

            XPathNavigator navigator;

            lock (_xmlDoc)
            {
                navigator = _xmlDoc.CreateNavigator();
            }

            var commentIdController = XmlCommentsIdHelper.GetCommentIdForType(apiDescription.ActionDescriptor.ControllerDescriptor.ControllerType);

            if (!string.IsNullOrWhiteSpace(commentIdController))
            {
                var controllerNode = navigator.SelectSingleNode(string.Format(MemberXPath, commentIdController));
                operation.tags[0] = ApplyControllerName(controllerNode) ?? operation.tags[0];
            }

            var commentId  = XmlCommentsIdHelper.GetCommentIdForMethod(reflectedActionDescriptor.MethodInfo);
            var methodNode = navigator.SelectSingleNode(string.Format(MemberXPath, commentId));

            if (methodNode == null)
            {
                return;
            }

            var summaryNode = methodNode.SelectSingleNode(SummaryXPath);

            if (summaryNode != null)
            {
                operation.summary = summaryNode.ExtractContent();
            }

            var remarksNode = methodNode.SelectSingleNode(RemarksXPath);

            if (remarksNode != null)
            {
                operation.description = remarksNode.ExtractContent();
            }

            ApplyParamComments(operation, methodNode, reflectedActionDescriptor.MethodInfo);

            ApplyResponseComments(operation, methodNode);
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var reflectedActionDescriptor = apiDescription.ActionDescriptor as ReflectedHttpActionDescriptor;

            if (reflectedActionDescriptor == null)
            {
                return;
            }

            XPathNavigator navigator;

            lock (_xmlDoc)
            {
                navigator = _xmlDoc.CreateNavigator();
            }

            var commentId  = XmlCommentsIdHelper.GetCommentIdForMethod(reflectedActionDescriptor.MethodInfo);
            var methodNode = navigator.SelectSingleNode(string.Format(MemberXPath, commentId));

            if (methodNode == null)
            {
                return;
            }

            var summaryNode = methodNode.SelectSingleNode(SummaryXPath);

            if (summaryNode != null)
            {
                operation.summary = summaryNode.ExtractContent();
            }

            var remarksNode = methodNode.SelectSingleNode(RemarksXPath);

            if (remarksNode != null)
            {
                operation.description = remarksNode.ExtractContent();
            }

            var authorInfo = apiDescription.GetControllerAndActionAttributes <ApiAuthorAttribute>().FirstOrDefault();

            if (authorInfo != null)
            {
                operation.summary += $"【{authorInfo.Name},{authorInfo.Time},{authorInfo.GetStatusName()}】";
            }

            ApplyParamComments(operation, methodNode, reflectedActionDescriptor.MethodInfo);

            ApplyResponseComments(operation, methodNode);
        }
예제 #11
0
 private static void AppendMethodName(MethodInfo methodInfo, StringBuilder builder)
 {
     builder.Append(methodInfo.Name);
     ParameterInfo[] parameters = methodInfo.GetParameters();
     if (parameters.Length == 0)
     {
         return;
     }
     builder.Append("(");
     foreach (ParameterInfo parameterInfo in parameters)
     {
         XmlCommentsIdHelper.AppendFullTypeName(parameterInfo.ParameterType, builder, true);
         builder.Append(",");
     }
     builder.Replace(",", ")", builder.Length - 1, 1);
 }
        private void ApplyPropertyComments(Schema propertySchema, PropertyInfo propertyInfo)
        {
            if (propertyInfo == null)
            {
                return;
            }

            var commentId    = XmlCommentsIdHelper.GetCommentIdForProperty(propertyInfo);
            var propertyNode = _navigator.SelectSingleNode(string.Format(MemberXPath, commentId));

            if (propertyNode == null)
            {
                return;
            }

            var propSummaryNode = propertyNode.SelectSingleNode(SummaryTag);

            if (propSummaryNode != null)
            {
                propertySchema.description = propSummaryNode.ExtractContent();
            }
        }
예제 #13
0
 public static void ExpandGenericArgsIfAny(Type type, StringBuilder builder)
 {
     if (type.IsGenericType)
     {
         StringBuilder builder1         = new StringBuilder("{");
         Type[]        genericArguments = type.GetGenericArguments();
         foreach (Type type1 in genericArguments)
         {
             XmlCommentsIdHelper.AppendFullTypeName(type1, builder1, true);
             builder1.Append(",");
         }
         builder1.Replace(",", "}", builder1.Length - 1, 1);
         builder.Replace(string.Format("`{0}", (object)genericArguments.Length), builder1.ToString());
     }
     else
     {
         if (!type.IsArray)
         {
             return;
         }
         XmlCommentsIdHelper.ExpandGenericArgsIfAny(type.GetElementType(), builder);
     }
 }
예제 #14
0
        public void Apply(
            Operation operation,
            SchemaRegistry schemaRegistry,
            ApiDescription apiDescription)
        {
            ReflectedHttpActionDescriptor actionDescriptor = apiDescription.get_ActionDescriptor() as ReflectedHttpActionDescriptor;

            if (actionDescriptor == null)
            {
                return;
            }
            XPathNavigator navigator;

            lock (this._xmlDoc)
                navigator = this._xmlDoc.CreateNavigator();
            string         commentIdForMethod = XmlCommentsIdHelper.GetCommentIdForMethod(actionDescriptor.get_MethodInfo());
            XPathNavigator methodNode         = navigator.SelectSingleNode(string.Format("/doc/members/member[@name='{0}']", (object)commentIdForMethod));

            if (methodNode == null)
            {
                return;
            }
            XPathNavigator node1 = methodNode.SelectSingleNode("summary");

            if (node1 != null)
            {
                operation.summary = node1.ExtractContent();
            }
            XPathNavigator node2 = methodNode.SelectSingleNode("remarks");

            if (node2 != null)
            {
                operation.description = node2.ExtractContent();
            }
            ApplyXmlActionComments.ApplyParamComments(operation, methodNode, actionDescriptor.get_MethodInfo());
            ApplyXmlActionComments.ApplyResponseComments(operation, methodNode);
        }
예제 #15
0
        private static void ApplyPropertyComments(
            XPathNavigator navigator,
            Schema propertySchema,
            PropertyInfo propertyInfo)
        {
            if (propertyInfo == (PropertyInfo)null)
            {
                return;
            }
            string         commentIdForProperty = XmlCommentsIdHelper.GetCommentIdForProperty(propertyInfo);
            XPathNavigator xpathNavigator       = navigator.SelectSingleNode(string.Format("/doc/members/member[@name='{0}']", (object)commentIdForProperty));

            if (xpathNavigator == null)
            {
                return;
            }
            XPathNavigator node = xpathNavigator.SelectSingleNode("summary");

            if (node == null)
            {
                return;
            }
            propertySchema.description = node.ExtractContent();
        }