public static string GetCommentIdForType(Type type) { StringBuilder builder = new StringBuilder("T:"); XmlCommentsIdHelper.AppendFullTypeName(type, builder, false); return(builder.ToString()); }
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); }
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()); }
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()); }
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); }
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); }
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); }
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(); } }
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); } }
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); }
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(); }