summaryrefslogtreecommitdiff
path: root/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-05-12 09:24:40 +0800
committerchai <215380520@qq.com>2023-05-12 09:24:40 +0800
commit2a1cd4fda8a4a8e649910d16b4dfa1ce7ae63543 (patch)
treea471fafed72e80b4ac3ac3002e06c34220dd6058 /ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
parentb8a694746562b37dc8dc5b8b5aec8612bb0964fc (diff)
*misc
Diffstat (limited to 'ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs')
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs100
1 files changed, 100 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
new file mode 100644
index 0000000..5d24338
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.DocsGenerator.Formatters
+{
+ public class XmlDocFormatter
+ {
+ public string Format(Type type)
+ {
+ return $"T:{FormatType(type)}";
+ }
+
+ public string Format(MethodBase methodInfo)
+ {
+ return $"M:{FormatMethod(methodInfo)}";
+ }
+
+ private string FormatType(Type type)
+ {
+ var @namespace = type.Namespace;
+ var name = type.Name;
+
+ return $"{@namespace}.{name}";
+ }
+
+ private string FormatMethod(MethodBase methodInfo)
+ {
+ var typeText = FormatType(methodInfo.DeclaringType);
+
+ var methodName = methodInfo.Name.Replace('.', '#');
+
+ var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments().ToList();
+
+ var methodGenericArguments = new List<Type>();
+ if (!methodInfo.IsConstructor)
+ {
+ methodGenericArguments = methodInfo.GetGenericArguments().ToList();
+ if (methodGenericArguments.Count > 0)
+ {
+ methodName = $"{methodName}``{methodGenericArguments.Count}";
+ }
+ }
+
+ var parametersText = string.Empty;
+ var parameters = methodInfo.GetParameters().ToList();
+ if (parameters.Count > 0)
+ {
+ parametersText = $"({string.Join(",", parameters.Select(p => FormatParameter(p.ParameterType, typeGenericArguments, methodGenericArguments)))})";
+ }
+
+ return $"{typeText}.{methodName}{parametersText}";
+ }
+
+ private string FormatParameter(Type parameterType, List<Type> typeGenericParameters, List<Type> methodGenericParameters)
+ {
+ var @namespace = parameterType.Namespace;
+ var name = parameterType.Name;
+
+ if (parameterType.IsByRef)
+ {
+ name = name.TrimEnd('&');
+ }
+
+ var typeName = $"{@namespace}.{name}";
+
+ // Check if the parameter is a generic argument of a type.
+ var index = typeGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"`{index}{refText}";
+ }
+
+ // Check if the parameter is a generic argument of a method.
+ index = methodGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"``{index}{refText}";
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = parameterType.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ name = name.Substring(0, name.IndexOf('`'));
+ genericArgumentsText = $"{{{string.Join(",", genericArguments.Select(a => FormatParameter(a, typeGenericParameters, methodGenericParameters)))}}}";
+ }
+
+ if (parameterType.IsByRef)
+ {
+ name += "@";
+ }
+
+ return $"{@namespace}.{name}{genericArgumentsText}";
+ }
+ }
+}