コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }