private void AddNode(TreeNodes targetNodes, string namePath, bool isNamespace) { var targetPath = namePath.Split('.'); bool validPath = false; TreeNodes existsNodes = null; var validNode = from x in targetNodes.Nodes where x.Name.ToLower() == targetPath[0].ToLower() select x; 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 ? ExpressionEditor.TreeNodes.NodeTypes.Namespace : ExpressionEditor.TreeNodes.NodeTypes.Primitive, Parent = targetNodes, Description = isNamespace ? string.Format("Namespace {0}", targetPath[0]) : "" }; targetNodes.AddNode(childNodes); if (isNamespace) { var nextPath = namePath.Substring(targetPath[0].Length, namePath.Length - targetPath[0].Length); if (nextPath.StartsWith(".")) { nextPath = nextPath.Substring(1, nextPath.Length - 1); } if (!string.IsNullOrEmpty(nextPath.Trim())) { this.AddNode(childNodes, nextPath); } } } else { if (isNamespace) { var nextPath = namePath.Substring(targetPath[0].Length, namePath.Length - targetPath[0].Length); if (nextPath.StartsWith(".")) { nextPath = nextPath.Substring(1, nextPath.Length - 1); } if (!string.IsNullOrEmpty(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) => { var memberNodes = new TreeNodes() { Name = targetmember.Name, AddStrings = targetmember.Name, ItemType = ExpressionEditor.TreeNodes.NodeTypes.Method, Parent = targetNodes }; targetNodes.AddNode(memberNodes); }); }
private void AddPropertyNode(TreeNodes targetNodes, Type target) { System.Threading.Tasks.Parallel.ForEach(target.GetProperties(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance), (targetmember) => { var memberNodes = new TreeNodes() { Name = targetmember.Name, AddStrings = targetmember.Name, ItemType = ExpressionEditor.TreeNodes.NodeTypes.Property, Parent = targetNodes, Description = CreatePropertyDescription(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 = ExpressionEditor.TreeNodes.NodeTypes.Class; // Case Generic 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 = ExpressionEditor.TreeNodes.NodeTypes.Class; newNodes.Description = string.Format("Class {0}", newNodes.AddStrings); } else if (target.IsEnum) { newNodes.ItemType = ExpressionEditor.TreeNodes.NodeTypes.Enum; newNodes.Description = string.Format("Enum {0}", newNodes.AddStrings); } else if (target.IsInterface) { newNodes.ItemType = ExpressionEditor.TreeNodes.NodeTypes.Interface; newNodes.Description = string.Format("Interface {0}", newNodes.AddStrings); } else if (target.IsPrimitive) { newNodes.ItemType = ExpressionEditor.TreeNodes.NodeTypes.Primitive; newNodes.Description = string.Format("{0}", newNodes.AddStrings); } else if (target.IsValueType) { newNodes.ItemType = ExpressionEditor.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); }