/// <summary> /// 创建目录树,并确定命名空间,类型,成员对应的页面的文件名 /// </summary> /// <returns></returns> private void CreateContentTree() { int pageCount = 0; foreach (Type type in DataProvider.GetSelectedTypes()) { ContentTreeItem nsItem = null, typeParentItem = null; string typeParentName = ""; nsItem = _root.Find(type.Namespace); if (nsItem == null) { string nsPageFileName = (++pageCount).ToString("000000") + Resources.Extension; _root.Add(nsItem = new ContentTreeItem(type.Namespace, nsPageFileName)); if (!string.IsNullOrEmpty(type.Namespace)) { _namespaceFileName.Add(type.Namespace, nsPageFileName); } } if (type.IsClass) { typeParentName = "Class"; } else if (type.IsEnum) { typeParentName = "Enumeration"; } else if (type.IsValueType) { typeParentName = "Structure"; } else if (type.IsInterface) { typeParentName = "Interface"; } else { typeParentName = "Delegate"; } typeParentItem = nsItem.Find(typeParentName); if (typeParentItem == null) { nsItem.Add(typeParentItem = new ContentTreeItem(typeParentName, "")); } ContentTreeItem typeItem = new ContentTreeItem(DocumentBuilderUtility.GetTypeDefinition(type, false), (++pageCount).ToString("000000") + Resources.Extension, type); _memberFileName.Add(DocumentBuilderUtility.GetMemberID(type), typeItem.FileName); typeParentItem.Add(typeItem); foreach (MemberInfo memberInfo in DataProvider.GetTypeSelectedMembers(type)) { string parentItemName = ""; #region 添加成员 switch (memberInfo.MemberType) { case MemberTypes.Constructor: { parentItemName = "Constructor"; break; } case MemberTypes.Method: { MethodInfo method = memberInfo as MethodInfo; if (!method.IsSpecialName) { if (method.IsPublic) { parentItemName = "PublicMethod"; } else if (method.IsPrivate) { parentItemName = "PrivateMethod"; } else { parentItemName = "ProtectedMethod"; } } break; } case MemberTypes.Field: { FieldInfo field = memberInfo as FieldInfo; if (field.IsPublic) { parentItemName = "PublicField"; } else if (field.IsPrivate) { parentItemName = "PrivateField"; } else { parentItemName = "ProtectedField"; } break; } case MemberTypes.Property: { PropertyInfo property = memberInfo as PropertyInfo; MethodInfo pm = property.GetGetMethod(true); if (pm == null) { pm = property.GetSetMethod(true); } if (pm != null) { if (pm.IsPublic) { parentItemName = "PublicProperty"; } else if (pm.IsPrivate) { parentItemName = "PrivateProperty"; } else { parentItemName = "ProtectedProperty"; } } break; } case MemberTypes.Event: { parentItemName = "Event"; break; } } if (!string.IsNullOrEmpty(parentItemName)) { ContentTreeItem parentItem = typeItem.Find(parentItemName); if (parentItem == null) { parentItem = new ContentTreeItem(parentItemName, typeItem.FileName + "#" + parentItemName); typeItem.Add(parentItem); } if (memberInfo.MemberType == MemberTypes.Constructor) { string fileName = (++pageCount).ToString("000000") + Resources.Extension; parentItem.Add(new ContentTreeItem(DocumentBuilderUtility.GetTypeDefinition(memberInfo.ReflectedType, false), fileName, memberInfo)); } else { string fileName = _memberFileName[DocumentBuilderUtility.GetMemberID(memberInfo)] as string; if (string.IsNullOrEmpty(fileName)) { fileName = (++pageCount).ToString("000000") + Resources.Extension; _memberFileName.Add(DocumentBuilderUtility.GetMemberID(memberInfo), fileName); } parentItem.Add(new ContentTreeItem(memberInfo.Name, fileName, memberInfo)); } } #endregion } } _root.Sort(); _total = pageCount; }