DirectoryClassScanner   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 0
dl 0
loc 51
ccs 16
cts 16
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 4 1
A includeFiles() 0 12 2
A getClassesDeclaredInFiles() 0 14 1
1
<?php
2
3
namespace Finalizer\Scanner;
4
5
final class DirectoryClassScanner
6
{
7
    /**
8
     * @param string[]|\Traversable $files
9
     *
10
     * @return \ReflectionClass[] all classes defined in this directory
11
     */
12 6
    public function __invoke($files)
13
    {
14 6
        return $this->getClassesDeclaredInFiles($this->includeFiles($files), get_declared_classes());
15
    }
16
17
    /**
18
     * @param string[]|\Traversable $files
19
     *
20
     * @return bool[] the files that were loaded, indexed by file name
21
     */
22 6
    private function includeFiles($files)
23
    {
24 6
        $loadedFiles = [];
25
26 6
        foreach ($files as $file) {
27 6
            require_once $file;
28
29 6
            $loadedFiles[realpath($file)] = true;
30
        }
31
32 6
        return $loadedFiles;
33
    }
34
35
    /**
36
     * @param string[] $files
37
     * @param string[] $classes
38
     *
39
     * @return \ReflectionClass[]
40
     */
41 6
    private function getClassesDeclaredInFiles(array $files, array $classes)
42
    {
43 6
        return array_filter(
44 6
            array_map(
45
                function ($className) {
46 6
                    return new \ReflectionClass($className);
47 6
                },
48 6
                $classes
49
            ),
50
            function (\ReflectionClass $class) use ($files) {
51 6
                return isset($files[realpath($class->getFileName())]);
52 6
            }
53
        );
54
    }
55
}
56