public function getVisibleSubClasses($name)
    {
        $remove  = [];
        $classes = ClassInfo::getValidSubClasses($name);
        
        foreach ($classes as $class) {
            
            $instance = Injector::inst()->get($class);
            
            if ($ancestor = $instance->stat('hide_ancestor')) {
                $remove[strtolower($ancestor)] = $ancestor;
            }
            
            if ($instance instanceof HiddenClass) {
                $remove[strtolower($class)] = $class;
            }
            
        }
        
        return array_diff_key($classes, $remove);
    }