internal static async Task Build( StreamWriter writer, string typeNamespace, List <Type> types, XDocument xmlComments) { await writer.WriteAsync("# "); await writer.WriteAsync(typeNamespace); await writer.WriteLineAsync(" Namespace"); await writer.WriteLineAsync(); await writer.WriteLineAsync("| | |"); await writer.WriteLineAsync("|_|_|"); foreach (var type in types) { await writer.WriteAsync("|["); await TypeHelper.FullName(writer, type, t => t.Name, "<", ">"); await writer.WriteAsync("]("); await writer.WriteAsync(FileNameHelper.TypeFileName(string.Empty, type)); await writer.WriteAsync(")|"); await writer.WriteAsync(XmlCommentHelper.Summary(XmlCommentHelper.TypeElement(xmlComments, type))); await writer.WriteLineAsync("|"); } await writer.WriteLineAsync(); }
internal static async Task Build(Assembly assembly, XDocument xmlComments, string outputPath) { var exportedTypesByNamespace = DocumentBuilder.ExportedTypesByNamespace(assembly); foreach ((var typeNamespace, var types) in exportedTypesByNamespace) { foreach (var type in types) { if (!TypeHelper.TypeIsADelegate(type)) { var constructors = type .GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(o => o.IsPublic || o.IsFamily) .ToList(); if (constructors.Count > 0) { await using (var writer = File.CreateText( FileNameHelper.ConstructorFileName(outputPath, type))) { if (constructors.Count > 1) { await ConstructorDocument.BuildMultiple(writer, type, constructors, xmlComments); } else { await ConstructorDocument.BuildSingle(writer, type, constructors[0], xmlComments); } } } foreach (var property in type.GetProperties().Where(o => o.DeclaringType == type)) { await using (var writer = File.CreateText(FileNameHelper.PropertyFileName(outputPath, property))) { await PropertyDocument.Build(writer, property, xmlComments); } } foreach (var methods in type .GetMethods( BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) .Where( o => o.DeclaringType == type && !o.IsSpecialName && (o.IsPublic || o.IsFamily) && (!o.IsVirtual || (o.Attributes & MethodAttributes.NewSlot) != 0)) .GroupBy(o => o.Name) .Select(o => o.ToList())) { await using (var writer = File.CreateText(FileNameHelper.MethodFileName(outputPath, methods[0]))) { if (methods.Count > 1) { await MethodDocument.BuildMultiple(writer, assembly, type, methods, xmlComments); } else { await MethodDocument.BuildSingle(writer, assembly, type, methods[0], xmlComments); } } } } await using (var writer = File.CreateText(FileNameHelper.TypeFileName(outputPath, type))) { if (TypeHelper.TypeIsADelegate(type)) { await DelegateDocument.Build(writer, type, xmlComments); } else { await TypeDocument.Build(writer, type, xmlComments); } } } await using (var writer = File.CreateText(FileNameHelper.NamespaceFileName(outputPath, typeNamespace))) { await NamespaceDocument.Build(writer, typeNamespace, types, xmlComments); } } if (exportedTypesByNamespace.Count > 1) { await using (var writer = File.CreateText(FileNameHelper.AssemblyFileName(outputPath, assembly.GetName()))) { await AssemblyDocument.Build( writer, assembly, exportedTypesByNamespace.Select(o => o.TypeNamespace)); } } }