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