コード例 #1
0
ファイル: ClassNode.cs プロジェクト: wwwK/EntityDB
 public ClassNode(string fullname, string comment, TreeNode.TreeNodeBase parent)
     : base(parent)
 {
     this.FullName = fullname;
     this.Members  = new List <ClassNodeMember>();
     this.Comment  = comment;
     try
     {
         this.Name = fullname.Substring(fullname.LastIndexOf(".") + 1);
         NameSpace = fullname.Substring(0, fullname.LastIndexOf("."));
     }
     catch
     {
         this.Name = fullname;
     }
 }
コード例 #2
0
ファイル: DllClassLoader.cs プロジェクト: wwwK/EntityDB
        public static System.Collections.ObjectModel.ObservableCollection <TreeNodeBase> GetAllClass(string filepath)
        {
            System.Collections.ObjectModel.ObservableCollection <TreeNodeBase> classNodes = new System.Collections.ObjectModel.ObservableCollection <TreeNodeBase>();
            List <TreeNode.TreeNodeBase> list = new List <TreeNode.TreeNodeBase>();

            #region 获取所有类信息
            XmlDocument xmldoc = new System.Xml.XmlDocument();
            xmldoc.Load(filepath);
            XmlNodeList memberNodes = xmldoc.SelectNodes("//member");

            foreach (XmlElement node in memberNodes)
            {
                string nameText = node.GetAttribute("name");
                string fullname = nameText.Substring(nameText.IndexOf(":") + 1);
                if (fullname.Contains("("))
                {
                    fullname = fullname.Substring(0, fullname.IndexOf("("));
                }

                string name = fullname;
                try
                {
                    name = fullname.Substring(fullname.LastIndexOf(".") + 1);
                }
                catch
                {
                }
                if (name == "#ctor")
                {
                    continue;
                }

                string comment = null;
                try
                {
                    comment = node.SelectSingleNode("summary").InnerText;
                }
                catch
                {
                }

                fullname = fullname.Trim();
                comment  = comment.Trim();

                if (nameText.StartsWith("T:"))
                {
                    ClassNode classNode = new ClassNode(fullname, comment, null);
                    list.Add(classNode);
                }
                else if (nameText.StartsWith("M:"))
                {
                    ClassNode classNode = (ClassNode)list.LastOrDefault();
                    if (classNode != null && classNode.FullName + "." + name == fullname)
                    {
                        //是这个class的成员
                        classNode.Members.Add(new ClassNodeMember()
                        {
                            Type    = ClassNodeType.method,
                            Comment = comment,
                            Name    = name,
                        });
                    }
                }
                else if (nameText.StartsWith("P:"))
                {
                    ClassNode classNode = (ClassNode)list.LastOrDefault();
                    if (classNode != null && classNode.FullName + "." + name == fullname)
                    {
                        //是这个class的成员
                        classNode.Members.Add(new ClassNodeMember()
                        {
                            Type    = ClassNodeType.property,
                            Comment = comment,
                            Name    = name,
                        });
                    }
                }
            }
            #endregion

            #region 把类分层次放入classNodes

            foreach (ClassNode node in list)
            {
                string[] paths = node.FullName.Split('.');
                System.Collections.ObjectModel.ObservableCollection <TreeNodeBase> currentNodes = classNodes;
                TreeNode.TreeNodeBase currentParent = null;
                for (int i = 0; i < paths.Length; i++)
                {
                    string itemName = paths[i];
                    var    nodeItem = currentNodes.FirstOrDefault(m => m.Name == itemName);
                    if (nodeItem == null)
                    {
                        if (i == paths.Length - 1)
                        {
                            nodeItem        = node;
                            nodeItem.Parent = currentParent;
                        }
                        else
                        {
                            nodeItem = new NamespaceNode(itemName, currentParent);
                        }
                        currentNodes.Add(nodeItem);
                    }
                    currentNodes  = nodeItem.Children;
                    currentParent = nodeItem;
                }
            }
            #endregion
            return(classNodes);
        }
コード例 #3
0
 public NamespaceNode(string name, TreeNode.TreeNodeBase parent)
     : base(parent)
 {
     this.Name = name;
 }
コード例 #4
0
ファイル: LoadingNode.cs プロジェクト: wwwK/EntityDB
 public LoadingNode(TreeNode.TreeNodeBase parent)
     : base(parent)
 {
     this.Name = "Loading...";
 }