Ejemplo n.º 1
0
        public void SelectType(Type t)
        {
            if (t == null)
            {
                return;
            }

            var assemblyNode = GetNodes().Where(n => n is AssemblyNode && ((AssemblyNode)n).Assembly == t.Assembly).FirstOrDefault();

            if (assemblyNode == null)
            {
                return;
            }

            assemblyNode.Populate(null);

            var namespaceNode = assemblyNode.GetNodes().Where(n => n is NamespaceNode && ((NamespaceNode)n).Namespace == t.Namespace).FirstOrDefault();

            if (namespaceNode == null)
            {
                return;
            }

            namespaceNode.Populate(null);


            AbstractAssemblyNode typeNode   = namespaceNode;
            List <Type>          pathToType = GetPathFromNonNestedTypeToType(t);

            foreach (var pathType in pathToType)
            {
                typeNode = typeNode.GetNodes().Where(n => n is TypeNode && ((TypeNode)n).Type.GUID == pathType.GUID).FirstOrDefault();

                if (typeNode == null)
                {
                    return;
                }
                typeNode.Populate(null);
            }

            typeNode.EnsureVisible();
            tvNodes.SelectedNode = typeNode;
        }
Ejemplo n.º 2
0
        public void SelectMember(MemberInfo member, int offset = -1)
        {
            Type t = member.DeclaringType;


            if (t == null)
            {
                System.Diagnostics.Debug.Assert(t != null, "Declaring type is null");
            }

            var assemblyNode = GetNodes().Where(n => n is AssemblyNode && ((AssemblyNode)n).Assembly == t.Assembly).FirstOrDefault();

            if (assemblyNode == null)
            {
                return;
            }

            assemblyNode.Populate(null);

            var namespaceNode = assemblyNode.GetNodes().Where(n => n is NamespaceNode && ((NamespaceNode)n).Namespace == t.Namespace).FirstOrDefault();

            if (namespaceNode == null)
            {
                return;
            }

            namespaceNode.Populate(null);

            AbstractAssemblyNode typeNode   = namespaceNode;
            List <Type>          pathToType = GetPathFromNonNestedTypeToType(t);

            foreach (var pathType in pathToType)
            {
                typeNode = typeNode.GetNodes().Where(n => n is TypeNode && ((TypeNode)n).Type.GUID == pathType.GUID).FirstOrDefault();

                if (typeNode == null)
                {
                    return;
                }
                typeNode.Populate(null);
            }


            var memberNode = typeNode.GetNodes().Where(n => n is MemberNode && ((MemberNode)n).Member.IsEqual(member))
                             .FirstOrDefault();

            if (memberNode == null)
            {
                var propNode = typeNode.GetNodes().Where(n =>
                {
                    if (n is PropertyNode)
                    {
                        var pNode     = ((PropertyNode)n);
                        var getMethod = pNode.Property.GetGetMethod(true);
                        if (getMethod != null && member.IsEqual(getMethod))
                        {
                            return(true);
                        }
                        var setMethod = pNode.Property.GetSetMethod(true);
                        if (setMethod != null && member.IsEqual(setMethod))
                        {
                            return(true);
                        }
                    }
                    return(false);
                }).FirstOrDefault();

                if (propNode == null)
                {
                    return;
                }

                propNode.Populate(null);

                memberNode = propNode.GetNodes().Where(n => n is MemberNode && ((MemberNode)n).Member.IsEqual(member))
                             .FirstOrDefault();

                if (memberNode == null)
                {
                    return;
                }
            }

            memberNode.EnsureVisible();

            tvNodes.SelectedNode = memberNode;
            if (offset != -1)
            {
                codePane.ScrollToInstruction(offset);
            }
        }