Code Duplication    Length = 11-12 lines in 2 locations

src/Ffcms/Core/Managers/BootManager.php 2 locations

@@ 89-100 (lines=12) @@
86
    public function compileBootableClasses()
87
    {
88
        // list app root's
89
        foreach ($this->appRoots as $app) {
90
            $app .= '/Apps/Controller/' . env_name;
91
            $files = File::listFiles($app, ['.php'], true);
92
            foreach ($files as $file) {
93
                // define full class name with namespace
94
                $class = 'Apps\Controller\\' . env_name . '\\' . Str::cleanExtension($file);
95
                // check if class exists (must be loaded over autoloader), boot method exist and this is controller instanceof
96
                if (class_exists($class) && method_exists($class, 'boot') && is_a($class, 'Ffcms\Core\Arch\Controller', true)) {
97
                    $this->objects[] = $class;
98
                }
99
            }
100
        }
101
102
        // list widget root's
103
        foreach ($this->widgetRoots as $widget) {
@@ 103-113 (lines=11) @@
100
        }
101
102
        // list widget root's
103
        foreach ($this->widgetRoots as $widget) {
104
            $widget .= '/Widgets/' . env_name;
105
            // widgets are packed in directory, classname should be the same with root directory name
106
            $dirs = Directory::scan($widget, GLOB_ONLYDIR, true);
107
            foreach ($dirs as $instance) {
108
                $class = 'Widgets\\' . env_name . '\\' . $instance . '\\' . $instance;
109
                if (class_exists($class) && method_exists($class, 'boot') && is_a($class, 'Ffcms\Core\Arch\Widget', true)) {
110
                    $this->objects[] = $class;
111
                }
112
            }
113
        }
114
    }
115
116
    /**