InvariantFetcher::getConditions()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 18
ccs 10
cts 10
cp 1
rs 9.6666
c 0
b 0
f 0
cc 3
nc 4
nop 1
crap 3
1
<?php
2
3
/**
4
 * PHP Deal framework
5
 *
6
 * @copyright Copyright 2019, Lisachenko Alexander <[email protected]>
7
 *
8
 * This source file is subject to the license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
declare(strict_types=1);
13
14
namespace PhpDeal\Contract\Fetcher\Parent;
15
16
use ReflectionClass;
17
18
class InvariantFetcher extends AbstractFetcher
19
{
20
    /**
21
     * Fetches conditions from all parent classes recursively
22
     *
23
     * @param ReflectionClass $class
24
     *
25
     * @return array
26
     */
27 8
    public function getConditions(ReflectionClass $class): array
28
    {
29 8
        $annotations   = [];
30 8
        $parents = [];
31
32 8
        $this->getParentClasses($class, $parents);
33 8
        $this->getInterfaces($class, $parents);
34
35 8
        foreach ($parents as $parent) {
36 6
            $annotations[] = $this->annotationReader->getClassAnnotations($parent);
37
        }
38
39 8
        if (\count($annotations)) {
40 6
            $annotations = \array_merge(...$annotations);
41
        }
42
43 8
        return $this->filterContractAnnotation($annotations);
44
    }
45
46
    /**
47
     * @param ReflectionClass $class
48
     * @param array $parents
49
     */
50 8
    private function getParentClasses(ReflectionClass $class, array &$parents): void
51
    {
52 8
        while ($class = $class->getParentClass()) {
53 3
            $parents[] = $class;
54
        }
55 8
    }
56
57
    /**
58
     * @param ReflectionClass $class
59
     * @param array $parents
60
     */
61 8
    private function getInterfaces(ReflectionClass $class, array &$parents): void
62
    {
63 8
        foreach ($class->getInterfaces() as $interface) {
64 3
            $parents[] = $interface;
65
        }
66 8
    }
67
}
68