| @@ 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 | ||