/// <summary> /// Generates a document model from a <see cref="ReflectionModel"/> /// and a <see cref="XmlDocumentationModel"/>. /// </summary> /// <param name="reflectionModel">The reflection model.</param> /// <param name="xmlModel">The XML documentation model.</param> /// <returns>A document model.</returns> public static DocumentModel Map(ReflectionModel reflectionModel, XmlDocumentationModel xmlModel) { var assemblies = new List<DocumentedAssembly>(); // Iterate all assemblies. foreach (var assembly in reflectionModel.Assemblies) { assemblies.Add(MapAssembly(assembly, xmlModel)); } // Create the document model. var model = new DocumentModel(assemblies); // Map extension methods. var finder = new ExtensionMethodFinder(model); var namespaces = model.Assemblies.SelectMany(a => a.Namespaces).ToArray(); foreach (var @namespace in namespaces) { foreach (var type in @namespace.Types) { type.SetExtensionMethods(finder.FindExtensionMethods(type)); } } // Map base types methods. var baseTypeFinder = new BaseTypeFinder(model); foreach (var @namespace in namespaces) { foreach (var type in @namespace.Types) { type.BaseType = baseTypeFinder.FindBaseType(type); } } // Build namespace trees and map them. var trees = DocumentedNamespaceTree.Build(namespaces); foreach (var @namespace in namespaces) { if (trees.ContainsKey(@namespace.Identity)) { @namespace.Tree = trees[@namespace.Identity]; } } return model; }