| @@ 10-63 (lines=54) @@ | ||
| 7 | use PHPSemVerChecker\Registry\Registry; |
|
| 8 | use PHPSemVerChecker\Report\Report; |
|
| 9 | ||
| 10 | class ClassAnalyzer { |
|
| 11 | protected $context = 'class'; |
|
| 12 | ||
| 13 | public function analyze(Registry $registryBefore, Registry $registryAfter) |
|
| 14 | { |
|
| 15 | $report = new Report(); |
|
| 16 | ||
| 17 | $keysBefore = array_keys($registryBefore->data['class']); |
|
| 18 | $keysAfter = array_keys($registryAfter->data['class']); |
|
| 19 | $added = array_diff($keysAfter, $keysBefore); |
|
| 20 | $removed = array_diff($keysBefore, $keysAfter); |
|
| 21 | $toVerify = array_intersect($keysBefore, $keysAfter); |
|
| 22 | ||
| 23 | foreach ($removed as $key) { |
|
| 24 | $fileBefore = $registryBefore->mapping['class'][$key]; |
|
| 25 | $classBefore = $registryBefore->data['class'][$key]; |
|
| 26 | ||
| 27 | $data = new ClassRemoved($fileBefore, $classBefore); |
|
| 28 | $report->addClass($data); |
|
| 29 | } |
|
| 30 | ||
| 31 | foreach ($toVerify as $key) { |
|
| 32 | $fileBefore = $registryBefore->mapping['class'][$key]; |
|
| 33 | /** @var \PhpParser\Node\Stmt\Class_ $classBefore */ |
|
| 34 | $classBefore = $registryBefore->data['class'][$key]; |
|
| 35 | $fileAfter = $registryAfter->mapping['class'][$key]; |
|
| 36 | /** @var \PhpParser\Node\Stmt\Class_ $classBefore */ |
|
| 37 | $classAfter = $registryAfter->data['class'][$key]; |
|
| 38 | ||
| 39 | // Leave non-strict comparison here |
|
| 40 | if ($classBefore != $classAfter) { |
|
| 41 | $analyzers = [ |
|
| 42 | new ClassMethodAnalyzer('class', $fileBefore, $fileAfter), |
|
| 43 | new PropertyAnalyzer('class', $fileBefore, $fileAfter), |
|
| 44 | ]; |
|
| 45 | ||
| 46 | foreach ($analyzers as $analyzer) { |
|
| 47 | $internalReport = $analyzer->analyze($classBefore, $classAfter); |
|
| 48 | $report->merge($internalReport); |
|
| 49 | } |
|
| 50 | } |
|
| 51 | } |
|
| 52 | ||
| 53 | foreach ($added as $key) { |
|
| 54 | $fileAfter = $registryAfter->mapping['class'][$key]; |
|
| 55 | $classAfter = $registryAfter->data['class'][$key]; |
|
| 56 | ||
| 57 | $data = new ClassAdded($fileAfter, $classAfter); |
|
| 58 | $report->addClass($data); |
|
| 59 | } |
|
| 60 | ||
| 61 | return $report; |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 10-63 (lines=54) @@ | ||
| 7 | use PHPSemVerChecker\Registry\Registry; |
|
| 8 | use PHPSemVerChecker\Report\Report; |
|
| 9 | ||
| 10 | class TraitAnalyzer { |
|
| 11 | protected $context = 'trait'; |
|
| 12 | ||
| 13 | public function analyze(Registry $registryBefore, Registry $registryAfter) |
|
| 14 | { |
|
| 15 | $report = new Report(); |
|
| 16 | ||
| 17 | $keysBefore = array_keys($registryBefore->data['trait']); |
|
| 18 | $keysAfter = array_keys($registryAfter->data['trait']); |
|
| 19 | $added = array_diff($keysAfter, $keysBefore); |
|
| 20 | $removed = array_diff($keysBefore, $keysAfter); |
|
| 21 | $toVerify = array_intersect($keysBefore, $keysAfter); |
|
| 22 | ||
| 23 | foreach ($removed as $key) { |
|
| 24 | $fileBefore = $registryBefore->mapping['trait'][$key]; |
|
| 25 | $traitBefore = $registryBefore->data['trait'][$key]; |
|
| 26 | ||
| 27 | $data = new TraitRemoved($fileBefore, $traitBefore); |
|
| 28 | $report->addTrait($data); |
|
| 29 | } |
|
| 30 | ||
| 31 | foreach ($toVerify as $key) { |
|
| 32 | $fileBefore = $registryBefore->mapping['trait'][$key]; |
|
| 33 | /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */ |
|
| 34 | $traitBefore = $registryBefore->data['trait'][$key]; |
|
| 35 | $fileAfter = $registryAfter->mapping['trait'][$key]; |
|
| 36 | /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */ |
|
| 37 | $traitAfter = $registryAfter->data['trait'][$key]; |
|
| 38 | ||
| 39 | // Leave non-strict comparison here |
|
| 40 | if ($traitBefore != $traitAfter) { |
|
| 41 | $analyzers = [ |
|
| 42 | new ClassMethodAnalyzer('trait', $fileBefore, $fileAfter), |
|
| 43 | new PropertyAnalyzer('trait', $fileBefore, $fileAfter), |
|
| 44 | ]; |
|
| 45 | ||
| 46 | foreach ($analyzers as $analyzer) { |
|
| 47 | $internalReport = $analyzer->analyze($traitBefore, $traitAfter); |
|
| 48 | $report->merge($internalReport); |
|
| 49 | } |
|
| 50 | } |
|
| 51 | } |
|
| 52 | ||
| 53 | foreach ($added as $key) { |
|
| 54 | $fileAfter = $registryAfter->mapping['trait'][$key]; |
|
| 55 | $traitAfter = $registryAfter->data['trait'][$key]; |
|
| 56 | ||
| 57 | $data = new TraitAdded($fileAfter, $traitAfter); |
|
| 58 | $report->addTrait($data); |
|
| 59 | } |
|
| 60 | ||
| 61 | return $report; |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||