private static IEnumerable GetChildren(ITypeElement typeElement, bool instanceVisible)
        {
            // Obtain language service for the type
            PsiLanguageType language = PresentationUtil.GetPresentationLanguage(typeElement);

            if (language.IsNullOrUnknown())
            {
                return(Enumerable.Empty <DeclaredElementEnvoy <ITypeMember> >());
            }

            LanguageService languageService = language.LanguageService();

            if (languageService == null)
            {
                return(Enumerable.Empty <DeclaredElementEnvoy <ITypeMember> >());
            }

            // Get symbol table for the typeElement and filter it with OverriddenFilter
            // This filter removes all but leaf members for override chains
            ISymbolTable symbolTable = TypeFactory.CreateType(typeElement).GetSymbolTable(typeElement.Module);

            symbolTable = symbolTable.Filter(OverriddenFilter.INSTANCE);

            // Obtain ITypeElement for System.Object
            // We don't want ToString(), GetHashCode(), GetType() and Equals() to pollute tree view
            ITypeElement objectType = typeElement.Module.GetPredefinedType(typeElement.ResolveContext).Object.GetTypeElement();
            var          children   = new List <DeclaredElementEnvoy <ITypeMember> >();

            foreach (string name in symbolTable.Names())
            {
                foreach (ISymbolInfo info in symbolTable.GetSymbolInfos(name))
                {
                    // Select all ITypeMembers from symbol table
                    var member = info.GetDeclaredElement() as ITypeMember;
                    if (member == null)
                    {
                        continue;
                    }
                    // Checks that member is visible in language. For example, get_Property() member is not visible in C#
                    if (!languageService.IsTypeMemberVisible(member))
                    {
                        continue;
                    }
                    // Do not show members of System.Object
                    // This doesn't hide respective overrides, though
                    if (Equals(member.GetContainingType(), objectType))
                    {
                        continue;
                    }
                    // Checks that member is not "synthetic". Synthetic members are generated by ReSharper to support
                    // generative languages, like ASP.NET
                    if (member.IsSynthetic())
                    {
                        continue;
                    }

                    // Checks if member should be displayed according to its accessibility
                    AccessibilityDomain.AccessibilityDomainType access = member.AccessibilityDomain.DomainType;
                    if (access == AccessibilityDomain.AccessibilityDomainType.PRIVATE)
                    {
                        continue;
                    }

                    // If we want only instance members, filter further
                    if (instanceVisible)
                    {
                        // Don't show nested types
                        if (member is ITypeElement)
                        {
                            continue;
                        }
                        // Don't show constructors
                        if (member is IConstructor)
                        {
                            continue;
                        }

                        // hide static, protected and "protected internal" members
                        if (member.IsStatic)
                        {
                            continue;
                        }
                        if (access == AccessibilityDomain.AccessibilityDomainType.PROTECTED)
                        {
                            continue;
                        }
                        if (access == AccessibilityDomain.AccessibilityDomainType.PROTECTED_AND_INTERNAL)
                        {
                            continue;
                        }
                    }
                    // It passed all filters! Create an envoy and add to collection
                    children.Add(new DeclaredElementEnvoy <ITypeMember>(member));
                }
            }

            return(children);
        }