44
55use PHPSemVerChecker \Operation \InterfaceAdded ;
66use PHPSemVerChecker \Operation \InterfaceRemoved ;
7+ use PHPSemVerChecker \Operation \InterfaceRenamedCaseOnly ;
78use PHPSemVerChecker \Registry \Registry ;
89use PHPSemVerChecker \Report \Report ;
910
@@ -14,39 +15,67 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
1415 {
1516 $ report = new Report ();
1617
17- $ keysBefore = array_keys ($ registryBefore ->data ['interface ' ]);
18- $ keysAfter = array_keys ($ registryAfter ->data ['interface ' ]);
19- $ added = array_diff ($ keysAfter , $ keysBefore );
20- $ removed = array_diff ($ keysBefore , $ keysAfter );
21- $ toVerify = array_intersect ($ keysBefore , $ keysAfter );
18+ $ interfacesBefore = $ registryBefore ->data ['interface ' ];
19+ $ interfacesAfter = $ registryAfter ->data ['interface ' ];
20+
21+ $ interfacesBeforeKeyed = [];
22+ $ mappingsBeforeKeyed = [];
23+ foreach ($ interfacesBefore as $ key => $ interfaceBefore )
24+ {
25+ $ interfacesBeforeKeyed [strtolower ($ interfaceBefore ->name )] = $ interfaceBefore ;
26+ $ mappingsBeforeKeyed [strtolower ($ interfaceBefore ->name )] = $ registryBefore ->mapping ['interface ' ][$ key ];
27+ }
28+
29+ $ interfacesAfterKeyed = [];
30+ $ mappingsAfterKeyed = [];
31+ foreach ($ interfacesAfter as $ key => $ interfaceAfter )
32+ {
33+ $ interfacesAfterKeyed [strtolower ($ interfaceAfter ->name )] = $ interfaceAfter ;
34+ $ mappingsAfterKeyed [strtolower ($ interfaceAfter ->name )] = $ registryAfter ->mapping ['interface ' ][$ key ];
35+ }
36+
37+
38+ $ interfaceNamesBefore = array_keys ($ interfacesBeforeKeyed );
39+ $ interfaceNamesAfter = array_keys ($ interfacesAfterKeyed );
40+ $ added = array_diff ($ interfaceNamesAfter , $ interfaceNamesBefore );
41+ $ removed = array_diff ($ interfaceNamesBefore , $ interfaceNamesAfter );
42+ $ toVerify = array_intersect ($ interfaceNamesBefore , $ interfaceNamesAfter );
2243
2344 foreach ($ removed as $ key ) {
24- $ fileBefore = $ registryBefore -> mapping [ ' interface ' ] [$ key ];
25- $ interfaceBefore = $ registryBefore -> data [ ' interface ' ] [$ key ];
45+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
46+ $ interfaceBefore = $ interfacesBeforeKeyed [$ key ];
2647
2748 $ data = new InterfaceRemoved ($ fileBefore , $ interfaceBefore );
2849 $ report ->addInterface ($ data );
2950 }
3051
3152 foreach ($ toVerify as $ key ) {
32- $ fileBefore = $ registryBefore -> mapping [ ' interface ' ] [$ key ];
53+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
3354 /** @var \PhpParser\Node\Stmt\Interface_ $interfaceBefore */
34- $ interfaceBefore = $ registryBefore -> data [ ' interface ' ] [$ key ];
35- $ fileAfter = $ registryAfter -> mapping [ ' interface ' ] [$ key ];
55+ $ interfaceBefore = $ interfacesBeforeKeyed [$ key ];
56+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
3657 /** @var \PhpParser\Node\Stmt\Interface_ $interfaceBefore */
37- $ interfaceAfter = $ registryAfter -> data [ ' interface ' ] [$ key ];
58+ $ interfaceAfter = $ interfacesAfterKeyed [$ key ];
3859
3960 // Leave non-strict comparison here
4061 if ($ interfaceBefore != $ interfaceAfter ) {
62+
63+ // Check if the name of the interface has changed case.
64+ if ($ interfaceBefore ->name !== $ interfaceAfter ->name )
65+ {
66+ $ report ->add ('interface ' , new InterfaceRenamedCaseOnly ($ fileAfter , $ interfaceAfter ));
67+ }
68+
4169 $ analyzer = new ClassMethodAnalyzer ('interface ' , $ fileBefore , $ fileAfter );
4270 $ interfaceMethodReport = $ analyzer ->analyze ($ interfaceBefore , $ interfaceAfter );
4371 $ report ->merge ($ interfaceMethodReport );
4472 }
4573 }
4674
4775 foreach ($ added as $ key ) {
48- $ fileAfter = $ registryAfter ->mapping ['interface ' ][$ key ];
49- $ interfaceAfter = $ registryAfter ->data ['interface ' ][$ key ];
76+
77+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
78+ $ interfaceAfter = $ interfacesAfterKeyed [$ key ];
5079
5180 $ data = new InterfaceAdded ($ fileAfter , $ interfaceAfter );
5281 $ report ->addInterface ($ data );
0 commit comments