Esempio n. 1
0
        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);
        }