Completed
Push — master ( 0e1c32...e580ff )
by T
05:02
created

InterfaceAnalyzer::analyze()   B

Complexity

Conditions 5
Paths 12

Size

Total Lines 44
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 25
CRAP Score 5.0101

Importance

Changes 3
Bugs 0 Features 1
Metric Value
c 3
b 0
f 1
dl 0
loc 44
ccs 25
cts 27
cp 0.9259
rs 8.439
cc 5
eloc 27
nc 12
nop 2
crap 5.0101
1
<?php
2
3
namespace PHPSemVerChecker\Analyzer;
4
5
use PHPSemVerChecker\Operation\InterfaceAdded;
6
use PHPSemVerChecker\Operation\InterfaceRemoved;
7
use PHPSemVerChecker\Registry\Registry;
8
use PHPSemVerChecker\Report\Report;
9
10
class InterfaceAnalyzer {
11
	protected $context = 'interface';
12
13 4
	public function analyze(Registry $registryBefore, Registry $registryAfter)
14
	{
15 4
		$report = new Report();
16
17 4
		$keysBefore = array_keys($registryBefore->data['interface']);
18 4
		$keysAfter = array_keys($registryAfter->data['interface']);
19 4
		$added = array_diff($keysAfter, $keysBefore);
20 4
		$removed = array_diff($keysBefore, $keysAfter);
21 4
		$toVerify = array_intersect($keysBefore, $keysAfter);
22
23 4
		foreach ($removed as $key) {
24 1
			$fileBefore = $registryBefore->mapping['interface'][$key];
25 1
			$interfaceBefore = $registryBefore->data['interface'][$key];
26
27 1
			$data = new InterfaceRemoved($fileBefore, $interfaceBefore);
28 1
			$report->addInterface($data);
29
		}
30
31 4
		foreach ($toVerify as $key) {
32 1
			$fileBefore = $registryBefore->mapping['interface'][$key];
33
			/** @var \PhpParser\Node\Stmt\Interface_ $interfaceBefore */
34 1
			$interfaceBefore = $registryBefore->data['interface'][$key];
35 1
			$fileAfter = $registryAfter->mapping['interface'][$key];
36
			/** @var \PhpParser\Node\Stmt\Interface_ $interfaceBefore */
37 1
			$interfaceAfter = $registryAfter->data['interface'][$key];
38
39
			// Leave non-strict comparison here
40 1
			if ($interfaceBefore != $interfaceAfter) {
41
				$analyzer = new ClassMethodAnalyzer('interface', $fileBefore, $fileAfter);
42
				$interfaceMethodReport = $analyzer->analyze($interfaceBefore, $interfaceAfter);
43 1
				$report->merge($interfaceMethodReport);
44
			}
45
		}
46
47 4
		foreach ($added as $key) {
48 1
			$fileAfter = $registryAfter->mapping['interface'][$key];
49 1
			$interfaceAfter = $registryAfter->data['interface'][$key];
50
51 1
			$data = new InterfaceAdded($fileAfter, $interfaceAfter);
52 1
			$report->addInterface($data);
53
		}
54
55 4
		return $report;
56
	}
57
}
58