Passed
Push — master ( 4ba5d0...423aca )
by Valentin
02:37
created

ModificationInspector::getLastModifiedDate()   A

Complexity

Conditions 5
Paths 9

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2568
c 0
b 0
f 0
cc 5
nc 9
nop 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Cycle\ORM\Promise\Materizalizer;
5
6
class ModificationInspector
7
{
8
    public function getLastModifiedDate(\ReflectionClass $reflection): \DateTime
9
    {
10
        $modifiedDate = $this->getLatestParentsModifiedDate($reflection);
11
12
        foreach ($reflection->getTraits() as $trait) {
13
            $traitModifiedDate = $this->getLatestParentsModifiedDate($trait);
14
15
            if ($traitModifiedDate > $modifiedDate) {
16
                $modifiedDate = $traitModifiedDate;
17
            }
18
        }
19
20
        foreach ($reflection->getInterfaces() as $interface) {
21
            $interfaceModifiedDate = $this->getLatestParentsModifiedDate($interface);
22
23
            if ($interfaceModifiedDate > $modifiedDate) {
24
                $modifiedDate = $interfaceModifiedDate;
25
            }
26
        }
27
28
        return $modifiedDate;
29
    }
30
31
    private function getLatestParentsModifiedDate(\ReflectionClass $reflection): \DateTime
32
    {
33
        $modifiedDate = new \DateTime('@' . filemtime($reflection->getFileName()));
34
35
        $parent = $reflection->getParentClass();
36
        while ($parent !== false) {
37
            $parentsModifiedDate = new \DateTime('@' . filemtime($parent->getFileName()));
38
39
            if ($parentsModifiedDate > $modifiedDate) {
40
                $modifiedDate = $parentsModifiedDate;
41
            }
42
43
            $parent = $parent->getParentClass();
44
        }
45
46
        return $modifiedDate;
47
    }
48
}