private void AddNode(TreeNodes targetNodes, string namePath, bool isNamespace) { var targetPath = namePath.Split('.'); bool validPath = false; TreeNodes existsNodes = null; var validNode = targetNodes.Nodes.Where(x => x.Name.ToLower() == targetPath[0].ToLower()); if ((validNode != null) && (validNode.Count() > 0)) { existsNodes = validNode.FirstOrDefault(); validPath = true; } if (!validPath) { TreeNodes childNodes = new TreeNodes { Name = targetPath[0], AddStrings = targetPath[0], ItemType = isNamespace ? TreeNodes.NodeTypes.Namespace : TreeNodes.NodeTypes.Primitive, Parent = targetNodes, Description = isNamespace ? string.Format("Namespace {0}", targetPath[0]) : "" }; targetNodes.AddNode(childNodes); if (isNamespace) { string nextPath = namePath.Substring(targetPath[0].Length, namePath.Length - targetPath[0].Length); if (nextPath.StartsWith(".")) { nextPath = nextPath.Substring(1, nextPath.Length - 1); } if (nextPath.Trim() != "") { this.AddNode(childNodes, nextPath); } } } else { if (isNamespace) { string nextPath = namePath.Substring(targetPath[0].Length, namePath.Length - targetPath[0].Length); if (nextPath.StartsWith(".")) { nextPath = nextPath.Substring(1, nextPath.Length - 1); } if (nextPath.Trim() != "") { this.AddNode(existsNodes, nextPath); } } } }
private void AddNestedTypeNode(TreeNodes targetNodes, Type target) { System.Threading.Tasks.Parallel.ForEach(target.GetNestedTypes(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance), targetmember => { TreeNodes memberNodes = new TreeNodes { Name = targetmember.Name, AddStrings = targetmember.Name, ItemType = TreeNodes.NodeTypes.Method, Parent = targetNodes }; targetNodes.AddNode(memberNodes); }); }
private void AddEventNode(TreeNodes targetNodes, Type target) { System.Threading.Tasks.Parallel.ForEach(target.GetEvents(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance), targetmember => { TreeNodes memberNodes = new TreeNodes { Name = targetmember.Name, AddStrings = targetmember.Name, ItemType = TreeNodes.NodeTypes.Event, Parent = targetNodes, Description = CreateEventDescription(targetmember) }; targetNodes.AddNode(memberNodes); }); }
private void AddTypeNode(TreeNodes targetNodes, Type target) { if (target.IsAbstract || !target.IsVisible) { return; } var typeNamespace = target.Namespace; var typeName = target.Name; var parentNode = this.SearchNodes(targetNodes, typeNamespace); TreeNodes newNodes = new TreeNodes { Name = typeName, AddStrings = typeName, Parent = parentNode, SystemType = target }; string nodesName = typeName; if (target.IsGenericType) { newNodes.ItemType = TreeNodes.NodeTypes.Class; if (typeName.Contains("`")) { nodesName = typeName.Substring(0, typeName.LastIndexOf("`")); newNodes.AddStrings = nodesName; } System.Text.StringBuilder paramStrings = new System.Text.StringBuilder(); int count = 0; foreach (var childArg in target.GetGenericArguments()) { if (count > 0) { paramStrings.Append(", "); } paramStrings.Append(childArg.Name); count += 1; } nodesName += "(" + paramStrings.ToString() + ")"; newNodes.Name = nodesName; newNodes.Description = string.Format("Class {0}", newNodes.AddStrings); } else if (target.IsClass) { newNodes.ItemType = TreeNodes.NodeTypes.Class; newNodes.Description = string.Format("Class {0}", newNodes.AddStrings); } else if (target.IsEnum) { newNodes.ItemType = TreeNodes.NodeTypes.Enum; newNodes.Description = string.Format("Enum {0}", newNodes.AddStrings); } else if (target.IsInterface) { newNodes.ItemType = TreeNodes.NodeTypes.Interface; newNodes.Description = string.Format("Interface {0}", newNodes.AddStrings); } else if (target.IsPrimitive) { newNodes.ItemType = TreeNodes.NodeTypes.Primitive; newNodes.Description = string.Format("{0}", newNodes.AddStrings); } else if (target.IsValueType) { newNodes.ItemType = TreeNodes.NodeTypes.ValueType; newNodes.Description = string.Format("{0}", newNodes.AddStrings); } else { return; } if (parentNode == null) { targetNodes.AddNode(newNodes); } else { parentNode.AddNode(newNodes); } this.AddMethodNode(newNodes, target); this.AddPropertyNode(newNodes, target); this.AddFieldNode(newNodes, target); this.AddEventNode(newNodes, target); this.AddNestedTypeNode(newNodes, target); }