@@ -130,26 +130,39 @@ public static function analyze(array $parametersA, array $parametersB): array
130130 $ changes = array_merge ($ changes , [
131131 'parameter_typing_added ' => false ,
132132 'parameter_typing_removed ' => false ,
133- 'parameter_typing_changed ' => false
133+ 'parameter_typing_changed ' => false ,
134+ 'parameter_nullable_type_added ' => false ,
135+ 'parameter_nullable_type_removed ' => false ,
136+ 'changed_param_index ' => 0
134137 ]);
135138 $ lengthA = count ($ parametersA );
136139 $ lengthB = count ($ parametersB );
137140
138141 $ iterations = min ($ lengthA , $ lengthB );
139142 for ($ i = 0 ; $ i < $ iterations ; ++$ i ) {
143+
144+ $ typeBefore = $ parametersA [$ i ]->type ;
145+ $ typeAfter = $ parametersB [$ i ]->type ;
140146 // Re-implement type checking to handle type changes as a single operation instead of both add and remove
141147 if (Type::get ($ parametersA [$ i ]->type ) !== Type::get ($ parametersB [$ i ]->type )) {
142148 // This section changed from parent::analyze() to handle typing changes
143149 if ($ parametersA [$ i ]->type !== null && $ parametersB [$ i ]->type !== null ) {
144150 $ changes ['parameter_typing_changed ' ] = true ;
151+ // Custom: detect nullable added
152+ if ($ typeBefore instanceof \PhpParser \Node \NullableType && !$ typeAfter instanceof \PhpParser \Node \NullableType) {
153+ $ changes ['parameter_nullable_type_removed ' ] = true ;
154+ $ changes ['changed_param_index ' ] = $ i ;
155+ } elseif (!$ typeBefore instanceof \PhpParser \Node \NullableType && $ typeAfter instanceof \PhpParser \Node \NullableType) {
156+ $ changes ['parameter_nullable_type_added ' ] = true ;
157+ $ changes ['changed_param_index ' ] = $ i ;
158+ }
145159 } elseif ($ parametersA [$ i ]->type !== null ) {
146160 $ changes ['parameter_typing_removed ' ] = true ;
147161 } elseif ($ parametersB [$ i ]->type !== null ) {
148162 $ changes ['parameter_typing_added ' ] = true ;
149163 }
150164 }
151165 }
152-
153166 return $ changes ;
154167 }
155168}
0 commit comments