/// <summary> /// Adds the namespace. /// </summary> /// <param name="assembly">The assembly.</param> /// <param name="name">The name.</param> /// <returns></returns> private NNamespace AddNamespace(NAssembly assembly, string name) { var namespaceId = "N:" + name; var @namespace = (NNamespace)_registry.FindById(namespaceId); if (@namespace == null) { @namespace = new NNamespace(name) { Assembly = assembly, Id = "N:" + name }; @namespace.FullName = @namespace.Name; @namespace.PageId = PageIdFunction(@namespace); @namespace.PageTitle = @namespace.Name + " " + @namespace.Category + " (" + assembly.Name + ")"; _registry.Register(@namespace); // Apply documentation on namespace from NamespaceDoc special class @namespace.DocNode = _source.Document.FindMemberDoc("T:" + name + "." + NamespaceDocClass); assembly.Namespaces.Add(@namespace); } return(@namespace); }
/// <summary> /// Loads from an assembly source definition all types to document. /// </summary> /// <param name="assemblySource">The assembly source definition.</param> /// <param name="memberRegistry">The member registry to populate with types.</param> /// <returns> /// An assembly documentator that contains all documented types, methods. /// </returns> public void LoadFrom(NAssemblySource assemblySource, MemberRegistry memberRegistry) { CurrentMergeGroup = assemblySource.MergeGroup; _source = assemblySource; _registry = memberRegistry; var assemblyDefinition = (AssemblyDefinition)assemblySource.Assembly; var assemblyName = assemblyDefinition.Name.Name; var assemblyId = "A:" + assemblyName; var assembly = (NAssembly)_registry.FindById(assemblyId); // If new assembly if (assembly == null) { assembly = new NAssembly { Name = assemblyName }; assembly.FullName = assembly.Name; assembly.Id = assemblyId; assembly.PageId = PageIdFunction(assembly); assembly.PageTitle = assembly.Name + " " + assembly.Category; assembly.Version = assemblyDefinition.Name.Version.ToString(); assembly.FileName = Path.GetFileName(Utility.GetProperFilePathCapitalization(assemblySource.Filename)); // Apply documentation from AssemblyDoc special class assembly.DocNode = _source.Document.FindMemberDoc("T:" + assembly.Name + "." + AssemblyDocClass); _registry.Register(assembly); } assembly.SetApiGroup(CurrentMergeGroup, true); CurrentAssembly = assembly; Logger.Message("Processing assembly [{0}] [{1}]", assembly.FullName, CurrentMergeGroup); // Process namespaces // Namespaces are created only if a type is actually public foreach (var module in assemblyDefinition.Modules) { foreach (var type in module.Types) { // Todo add configurable filter if (!type.IsPublic) { continue; } // Skip empty namespaces and special <Module> if (string.IsNullOrEmpty(type.Namespace) || type.Namespace.StartsWith("<")) { continue; } // Create naemespace var parentNamespace = AddNamespace(assembly, type.Namespace); parentNamespace.SetApiGroup(CurrentMergeGroup, true); AddType(parentNamespace, type); } } //// Remove empty namespaces //foreach (var removeNamespace in namespaces.Values) //{ // if (removeNamespace.Types.Count == 0) // assembly.Namespaces.Remove(removeNamespace); //} // Sort namespace in alphabetical order //@assembly.Namespaces.Sort((left, right) => left.PageId.CompareTo(right.PageId)); //foreach (var namespaceName in @assembly.Namespaces) // namespaces[namespaceName].Types.Sort((left, right) => left.PageId.CompareTo(right.PageId)); }