66use PHPSemVerChecker \Comparator \Implementation ;
77use PHPSemVerChecker \Comparator \Signature ;
88use PHPSemVerChecker \Operation \ClassMethodAdded ;
9+ use PHPSemVerChecker \Operation \ClassMethodCaseChanged ;
910use PHPSemVerChecker \Operation \ClassMethodImplementationChanged ;
1011use PHPSemVerChecker \Operation \ClassMethodOperationUnary ;
1112use PHPSemVerChecker \Operation \ClassMethodParameterAdded ;
1920use PHPSemVerChecker \Operation \ClassMethodRemoved ;
2021use PHPSemVerChecker \Report \Report ;
2122
22- class ClassMethodAnalyzer {
23+ class ClassMethodAnalyzer
24+ {
2325 /**
2426 * @var string
2527 */
@@ -59,12 +61,12 @@ public function analyze(Stmt $contextBefore, Stmt $contextAfter)
5961
6062 $ methodsBeforeKeyed = [];
6163 foreach ($ methodsBefore as $ method ) {
62- $ methodsBeforeKeyed [$ method ->name ] = $ method ;
64+ $ methodsBeforeKeyed [strtolower ( $ method ->name ) ] = $ method ;
6365 }
6466
6567 $ methodsAfterKeyed = [];
6668 foreach ($ methodsAfter as $ method ) {
67- $ methodsAfterKeyed [$ method ->name ] = $ method ;
69+ $ methodsAfterKeyed [strtolower ( $ method ->name ) ] = $ method ;
6870 }
6971
7072 $ methodNamesBefore = array_keys ($ methodsBeforeKeyed );
@@ -84,25 +86,39 @@ public function analyze(Stmt $contextBefore, Stmt $contextAfter)
8486
8587 foreach ($ methodsToVerify as $ method ) {
8688 /** @var \PhpParser\Node\Stmt\ClassMethod $methodBefore */
87- $ methodBefore = $ methodsBeforeKeyed [$ method ];
89+ $ methodBefore = $ methodsBeforeKeyed [strtolower ( $ method) ];
8890 /** @var \PhpParser\Node\Stmt\ClassMethod $methodAfter */
89- $ methodAfter = $ methodsAfterKeyed [$ method ];
91+ $ methodAfter = $ methodsAfterKeyed [strtolower ( $ method) ];
9092
9193 // Leave non-strict comparison here
9294 if ($ methodBefore != $ methodAfter ) {
93- $ paramsBefore = $ methodBefore ->params ;
94- $ paramsAfter = $ methodAfter ->params ;
95+ // Detect method case changed.
96+ // If we entered this section then the normalized names (lowercase) were equal.
97+ if ($ methodBefore ->name !== $ methodAfter ->name ) {
98+ $ report ->add (
99+ $ this ->context ,
100+ new ClassMethodCaseChanged (
101+ $ this ->context ,
102+ $ this ->fileBefore ,
103+ $ contextAfter ,
104+ $ methodBefore ,
105+ $ this ->fileAfter ,
106+ $ contextAfter ,
107+ $ methodAfter
108+ )
109+ );
110+ }
95111
96- $ signatureResult = Signature::analyze ($ paramsBefore , $ paramsAfter );
112+ $ signatureResult = Signature::analyze ($ methodBefore -> getParams () , $ methodAfter -> getParams () );
97113
98114 $ changes = [
99- 'parameter_added ' => ClassMethodParameterAdded::class,
100- 'parameter_removed ' => ClassMethodParameterRemoved::class,
101- 'parameter_renamed ' => ClassMethodParameterNameChanged::class,
102- 'parameter_typing_added ' => ClassMethodParameterTypingAdded::class,
103- 'parameter_typing_removed ' => ClassMethodParameterTypingRemoved::class,
104- 'parameter_default_added ' => ClassMethodParameterDefaultAdded::class,
105- 'parameter_default_removed ' => ClassMethodParameterDefaultRemoved::class,
115+ 'parameter_added ' => ClassMethodParameterAdded::class,
116+ 'parameter_removed ' => ClassMethodParameterRemoved::class,
117+ 'parameter_renamed ' => ClassMethodParameterNameChanged::class,
118+ 'parameter_typing_added ' => ClassMethodParameterTypingAdded::class,
119+ 'parameter_typing_removed ' => ClassMethodParameterTypingRemoved::class,
120+ 'parameter_default_added ' => ClassMethodParameterDefaultAdded::class,
121+ 'parameter_default_removed ' => ClassMethodParameterDefaultRemoved::class,
106122 'parameter_default_value_changed ' => ClassMethodParameterDefaultValueChanged::class,
107123 ];
108124
@@ -113,23 +129,39 @@ public function analyze(Stmt $contextBefore, Stmt $contextAfter)
113129 if (is_a ($ class , ClassMethodOperationUnary::class, true )) {
114130 $ data = new $ class ($ this ->context , $ this ->fileAfter , $ contextAfter , $ methodAfter );
115131 } else {
116- $ data = new $ class ($ this ->context , $ this ->fileBefore , $ contextBefore , $ methodBefore , $ this ->fileAfter , $ contextAfter , $ methodAfter );
132+ $ data = new $ class (
133+ $ this ->context ,
134+ $ this ->fileBefore ,
135+ $ contextBefore ,
136+ $ methodBefore ,
137+ $ this ->fileAfter ,
138+ $ contextAfter ,
139+ $ methodAfter
140+ );
117141 }
118142 $ report ->add ($ this ->context , $ data );
119143 }
120144
121145 // Difference in source code
122146 // Cast to array because interfaces do not have stmts (= null)
123147 if ( ! Implementation::isSame ((array )$ methodBefore ->stmts , (array )$ methodAfter ->stmts )) {
124- $ data = new ClassMethodImplementationChanged ($ this ->context , $ this ->fileBefore , $ contextBefore , $ methodBefore , $ this ->fileAfter , $ contextAfter , $ methodAfter );
148+ $ data = new ClassMethodImplementationChanged (
149+ $ this ->context ,
150+ $ this ->fileBefore ,
151+ $ contextBefore ,
152+ $ methodBefore ,
153+ $ this ->fileAfter ,
154+ $ contextAfter ,
155+ $ methodAfter
156+ );
125157 $ report ->add ($ this ->context , $ data );
126158 }
127159 }
128160 }
129161
130162 // Added methods implies MINOR BUMP
131163 foreach ($ methodsAdded as $ method ) {
132- $ methodAfter = $ methodsAfterKeyed [$ method ];
164+ $ methodAfter = $ methodsAfterKeyed [strtolower ( $ method) ];
133165 $ data = new ClassMethodAdded ($ this ->context , $ this ->fileAfter , $ contextAfter , $ methodAfter );
134166 $ report ->add ($ this ->context , $ data );
135167 }
0 commit comments