コード例 #1
0
 /// <summary>
 /// Converts the simple namespace into a full namespace.
 /// </summary>
 /// <param name="simpleNamespace">The simple namespace to upgrade.</param>
 /// <returns>An full namespace.</returns>
 protected CodeDocNamespace ToFullNamespace(CodeDocSimpleNamespace simpleNamespace)
 {
     if (simpleNamespace == null) throw new ArgumentNullException("simpleNamespace");
     Contract.Ensures(Contract.Result<CodeDocNamespace>() != null);
     var result = new CodeDocNamespace(simpleNamespace.CRef) {
         AssemblyCRefs = simpleNamespace.AssemblyCRefs,
         TypeCRefs = simpleNamespace.TypeCRefs
     };
     CopySimpleMemberAttributes(result, simpleNamespace);
     result.Uri = simpleNamespace.Uri ?? simpleNamespace.CRef.ToUri();
     result.Assemblies = simpleNamespace.AssemblyCRefs.Select(GetCodeDocSimpleAssembly).ToList();
     result.Types = simpleNamespace.TypeCRefs.Select(cRef => GetMemberModel(cRef, CodeDocMemberDetailLevel.QuickSummary)).Cast<CodeDocType>().ToList();
     return result;
 }
コード例 #2
0
        /// <summary>
        /// Generates the core collection of related namespaces and assemblies.
        /// </summary>
        /// <returns>The related assemblies and namespaces.</returns>
        protected override SimpleAssemblyNamespaceColleciton CreateSimpleAssemblyNamespaceCollection()
        {
            var assemblyModels = new List<CodeDocSimpleAssembly>();
            var namespaceModels = new Dictionary<string, CodeDocSimpleNamespace>();

            foreach (var assembly in CRefLookup.Assemblies) {
                var assemblyShortName = assembly.GetName().Name;
                var assemblyModel = new CodeDocSimpleAssembly(GetCRefIdentifier(assembly)) {
                    AssemblyFileName = Path.GetFileName(assembly.GetFilePath()),
                    Title = assemblyShortName,
                    ShortName = assemblyShortName,
                    FullName = assembly.FullName,
                    NamespaceName = assemblyShortName,
                    SubTitle = "Assembly",
                    NamespaceCRefs = new List<CRefIdentifier>()
                };
                assemblyModel.Uri = assemblyModel.CRef.ToUri();

                var assemblyTypeCRefs = new List<CRefIdentifier>();
                var assemblyNamespaceNames = new HashSet<string>();
                foreach (var type in assembly
                    .GetTypes()
                    .Where(t => !t.IsNested)
                    .Where(MemberFilter)
                ) {
                    var typeCRef = GetCRefIdentifier(type);
                    assemblyTypeCRefs.Add(typeCRef);
                    var namespaceName = type.Namespace;
                    if (String.IsNullOrWhiteSpace(namespaceName))
                        namespaceName = String.Empty;

                    CodeDocSimpleNamespace namespaceModel;
                    if (!namespaceModels.TryGetValue(namespaceName, out namespaceModel)) {
                        var namespaceTitle = String.IsNullOrEmpty(namespaceName) ? "global" : namespaceName;
                        Contract.Assume(!String.IsNullOrEmpty("N:" + namespaceName));
                        namespaceModel = new CodeDocSimpleNamespace(new CRefIdentifier("N:" + namespaceName)) {
                            Title = namespaceTitle,
                            ShortName = namespaceTitle,
                            FullName = namespaceTitle,
                            NamespaceName = namespaceTitle,
                            SubTitle = "Namespace",
                            TypeCRefs = new List<CRefIdentifier>(),
                            AssemblyCRefs = new List<CRefIdentifier>(),
                        };
                        namespaceModel.Uri = namespaceModel.CRef.ToUri();
                        namespaceModels.Add(namespaceName, namespaceModel);
                    }

                    namespaceModel.TypeCRefs.Add(typeCRef);

                    if (assemblyNamespaceNames.Add(namespaceName)) {
                        // this is the first time this assembly has seen this namespace
                        namespaceModel.AssemblyCRefs.Add(assemblyModel.CRef);
                        assemblyModel.NamespaceCRefs.Add(namespaceModel.CRef);
                    }

                }

                assemblyModel.TypeCRefs = new ReadOnlyCollection<CRefIdentifier>(assemblyTypeCRefs);
                assemblyModels.Add(assemblyModel);
            }

            // freeze the namespace & assembly collections
            foreach (var namespaceModel in namespaceModels.Values) {
                namespaceModel.AssemblyCRefs = namespaceModel.AssemblyCRefs.AsReadOnly();
            }
            foreach (var assemblyModel in assemblyModels) {
                assemblyModel.NamespaceCRefs = assemblyModel.NamespaceCRefs.AsReadOnly();
            }

            return new SimpleAssemblyNamespaceColleciton(
                assemblyModels.OrderBy(x => x.Title).ToArray(),
                namespaceModels.Values.OrderBy(x => x.Title).ToArray());
        }