public List <IAssemblyNode> CreateTree() { Type[] types = _assembly.GetTypes(); foreach (var t in types) { NamespaceNode npNode = new NamespaceNode(t); if (Tree.IndexOf(npNode) >= 0) { npNode = Tree[Tree.IndexOf(npNode)] as NamespaceNode; } else { Tree.Add(npNode); } TreeNode = npNode; TypeNode tNode = new TypeNode(t); if (npNode.Nodes.IndexOf(tNode) >= 0) { tNode = npNode.Nodes[npNode.Nodes.IndexOf(tNode)] as TypeNode; } else { npNode.Nodes.Add(tNode); } MethodInfo[] methods = t.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly); List <MethodInfo> ext = GetExtensionMethods(methods); List <IAssemblyNode> tExt = new List <IAssemblyNode> { }; foreach (var temp in ext) { var extMethod = new MethodNode(temp); extMethod.Name += " (extension method)"; tExt.Add(extMethod); var tempList = methods.ToList(); tempList.Remove(temp); methods = tempList.ToArray(); } TypeNode tn = FindExtendedType(Tree, ext) as TypeNode; tn?.Nodes.AddRange(tExt); tNode.Nodes.AddRange(methods.Select(item => new MethodNode(item)).ToList()); PropertyInfo[] properties = t.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly); tNode.Nodes.AddRange(properties.Select(item => new PropertyNode(item)).ToList()); FieldInfo[] fields = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly); tNode.Nodes.AddRange(fields.Select(item => new FieldNode(item)).ToList()); } return(Tree); }