Code Duplication    Length = 54-54 lines in 2 locations

src/PHPSemVerChecker/Analyzer/ClassAnalyzer.php 1 location

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

src/PHPSemVerChecker/Analyzer/TraitAnalyzer.php 1 location

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