@@ 11-92 (lines=82) @@ | ||
8 | use PHPSemVerChecker\Registry\Registry; |
|
9 | use PHPSemVerChecker\Report\Report; |
|
10 | ||
11 | class ClassAnalyzer { |
|
12 | protected $context = 'class'; |
|
13 | ||
14 | public function analyze(Registry $registryBefore, Registry $registryAfter) |
|
15 | { |
|
16 | $report = new Report(); |
|
17 | ||
18 | $classesBefore = $registryBefore->data['class']; |
|
19 | $classesAfter = $registryAfter->data['class']; |
|
20 | ||
21 | $classesBeforeKeyed = []; |
|
22 | $mappingsBeforeKeyed = []; |
|
23 | foreach($classesBefore as $key => $classBefore) |
|
24 | { |
|
25 | $classesBeforeKeyed[strtolower($classBefore->name)] = $classBefore; |
|
26 | $mappingsBeforeKeyed[strtolower($classBefore->name)] = $registryBefore->mapping['class'][$key]; |
|
27 | } |
|
28 | ||
29 | $classesAfterKeyed = []; |
|
30 | $mappingsAfterKeyed = []; |
|
31 | foreach($classesAfter as $key => $classAfter) |
|
32 | { |
|
33 | $classesAfterKeyed[strtolower($classAfter->name)] = $classAfter; |
|
34 | $mappingsAfterKeyed[strtolower($classAfter->name)] = $registryAfter->mapping['class'][$key]; |
|
35 | } |
|
36 | ||
37 | $classNamesBefore = array_keys($classesBeforeKeyed); |
|
38 | $classNamesAfter = array_keys($classesAfterKeyed); |
|
39 | $added = array_diff($classNamesAfter, $classNamesBefore); |
|
40 | $removed = array_diff($classNamesBefore, $classNamesAfter); |
|
41 | $toVerify = array_intersect($classNamesBefore, $classNamesAfter); |
|
42 | ||
43 | foreach ($removed as $key) { |
|
44 | $fileBefore = $mappingsBeforeKeyed[$key]; |
|
45 | $classBefore = $classesBeforeKeyed[$key]; |
|
46 | ||
47 | $data = new ClassRemoved($fileBefore, $classBefore); |
|
48 | $report->addClass($data); |
|
49 | } |
|
50 | ||
51 | foreach ($toVerify as $key) { |
|
52 | $fileBefore = $mappingsBeforeKeyed[$key]; |
|
53 | /** @var \PhpParser\Node\Stmt\Class_ $classBefore */ |
|
54 | $classBefore = $classesBeforeKeyed[$key]; |
|
55 | $fileAfter = $mappingsAfterKeyed[$key]; |
|
56 | /** @var \PhpParser\Node\Stmt\Class_ $classBefore */ |
|
57 | $classAfter = $classesAfterKeyed[$key]; |
|
58 | ||
59 | // Leave non-strict comparison here |
|
60 | if ($classBefore != $classAfter) { |
|
61 | ||
62 | // Check for case change of class name |
|
63 | if( |
|
64 | $classBefore->name !== $classAfter->name |
|
65 | && strtolower($classBefore->name) === strtolower($classAfter->name) |
|
66 | ) { |
|
67 | $report->add($this->context, new ClassRenamedCaseOnly($fileAfter, $classAfter)); |
|
68 | } |
|
69 | ||
70 | $analyzers = [ |
|
71 | new ClassMethodAnalyzer('class', $fileBefore, $fileAfter), |
|
72 | new PropertyAnalyzer('class', $fileBefore, $fileAfter), |
|
73 | ]; |
|
74 | ||
75 | foreach ($analyzers as $analyzer) { |
|
76 | $internalReport = $analyzer->analyze($classBefore, $classAfter); |
|
77 | $report->merge($internalReport); |
|
78 | } |
|
79 | } |
|
80 | } |
|
81 | ||
82 | foreach ($added as $key) { |
|
83 | $fileAfter = $mappingsAfterKeyed[$key]; |
|
84 | $classAfter = $classesAfterKeyed[$key]; |
|
85 | ||
86 | $data = new ClassAdded($fileAfter, $classAfter); |
|
87 | $report->addClass($data); |
|
88 | } |
|
89 | ||
90 | return $report; |
|
91 | } |
|
92 | } |
|
93 |
@@ 11-92 (lines=82) @@ | ||
8 | use PHPSemVerChecker\Registry\Registry; |
|
9 | use PHPSemVerChecker\Report\Report; |
|
10 | ||
11 | class TraitAnalyzer { |
|
12 | protected $context = 'trait'; |
|
13 | ||
14 | public function analyze(Registry $registryBefore, Registry $registryAfter) |
|
15 | { |
|
16 | $report = new Report(); |
|
17 | ||
18 | $traitsBefore = $registryBefore->data['trait']; |
|
19 | $traitsAfter = $registryAfter->data['trait']; |
|
20 | ||
21 | $traitsBeforeKeyed = []; |
|
22 | $mappingsBeforeKeyed = []; |
|
23 | foreach($traitsBefore as $key => $traitBefore) |
|
24 | { |
|
25 | $traitsBeforeKeyed[strtolower($traitBefore->name)] = $traitBefore; |
|
26 | $mappingsBeforeKeyed[strtolower($traitBefore->name)] = $registryBefore->mapping['trait'][$key]; |
|
27 | } |
|
28 | ||
29 | $traitsAfterKeyed = []; |
|
30 | $mappingsAfterKeyed = []; |
|
31 | foreach($traitsAfter as $key => $traitAfter) |
|
32 | { |
|
33 | $traitsAfterKeyed[strtolower($traitAfter->name)] = $traitAfter; |
|
34 | $mappingsAfterKeyed[strtolower($traitAfter->name)] = $registryAfter->mapping['trait'][$key]; |
|
35 | } |
|
36 | ||
37 | $traitNamesBefore = array_keys($traitsBeforeKeyed); |
|
38 | $traitNamesAfter = array_keys($traitsAfterKeyed); |
|
39 | $added = array_diff($traitNamesAfter, $traitNamesBefore); |
|
40 | $removed = array_diff($traitNamesBefore, $traitNamesAfter); |
|
41 | $toVerify = array_intersect($traitNamesBefore, $traitNamesAfter); |
|
42 | ||
43 | foreach ($removed as $key) { |
|
44 | $fileBefore = $mappingsBeforeKeyed[$key]; |
|
45 | $traitBefore = $traitsBeforeKeyed[$key]; |
|
46 | ||
47 | $data = new TraitRemoved($fileBefore, $traitBefore); |
|
48 | $report->addTrait($data); |
|
49 | } |
|
50 | ||
51 | foreach ($toVerify as $key) { |
|
52 | $fileBefore = $mappingsBeforeKeyed[$key]; |
|
53 | /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */ |
|
54 | $traitBefore = $traitsBeforeKeyed[$key]; |
|
55 | $fileAfter = $mappingsAfterKeyed[$key]; |
|
56 | /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */ |
|
57 | $traitAfter = $traitsAfterKeyed[$key]; |
|
58 | ||
59 | // Leave non-strict comparison here |
|
60 | if ($traitBefore != $traitAfter) { |
|
61 | ||
62 | // Check for name case change. |
|
63 | if( |
|
64 | $traitBefore->name !== $traitAfter->name |
|
65 | && strtolower($traitBefore->name) === strtolower($traitAfter->name) |
|
66 | ) { |
|
67 | $report->add($this->context, new TraitRenamedCaseOnly($fileAfter, $traitAfter)); |
|
68 | } |
|
69 | ||
70 | $analyzers = [ |
|
71 | new ClassMethodAnalyzer('trait', $fileBefore, $fileAfter), |
|
72 | new PropertyAnalyzer('trait', $fileBefore, $fileAfter), |
|
73 | ]; |
|
74 | ||
75 | foreach ($analyzers as $analyzer) { |
|
76 | $internalReport = $analyzer->analyze($traitBefore, $traitAfter); |
|
77 | $report->merge($internalReport); |
|
78 | } |
|
79 | } |
|
80 | } |
|
81 | ||
82 | foreach ($added as $key) { |
|
83 | $fileAfter = $mappingsAfterKeyed[$key]; |
|
84 | $traitAfter = $traitsAfter[$key]; |
|
85 | ||
86 | $data = new TraitAdded($fileAfter, $traitAfter); |
|
87 | $report->addTrait($data); |
|
88 | } |
|
89 | ||
90 | return $report; |
|
91 | } |
|
92 | } |
|
93 |