|
20 | 20 | use Magento\SemanticVersionChecker\Operation\ClassMethodOptionalParameterAdded;
|
21 | 21 | use Magento\SemanticVersionChecker\Operation\ClassMethodOverwriteAdded;
|
22 | 22 | use Magento\SemanticVersionChecker\Operation\ClassMethodParameterTypingChanged;
|
| 23 | +use Magento\SemanticVersionChecker\Operation\ClassMethodParameterTypingChangedNullable; |
23 | 24 | use Magento\SemanticVersionChecker\Operation\ClassMethodReturnTypingChanged;
|
24 | 25 | use Magento\SemanticVersionChecker\Operation\ExtendableClassConstructorOptionalParameterAdded;
|
25 | 26 | use Magento\SemanticVersionChecker\Operation\Visibility\MethodDecreased as VisibilityMethodDecreased;
|
@@ -258,17 +259,46 @@ protected function reportChanged($report, $contextBefore, $contextAfter, $method
|
258 | 259 | $report->add($this->context, $data);
|
259 | 260 | $signatureChanged = true;
|
260 | 261 | } elseif ($signatureChanges['parameter_typing_changed']) {
|
261 |
| - $data = new ClassMethodParameterTypingChanged( |
262 |
| - $this->context, |
263 |
| - $this->fileAfter, |
264 |
| - $contextAfter, |
265 |
| - $methodAfter |
266 |
| - ); |
267 |
| - echo "\nTemporary added code \n"; |
268 |
| - print_r($data); |
269 |
| - echo "\n======\n"; |
270 |
| - print_r($data, true); |
271 |
| - echo "\nEnd Temporary added code \n"; |
| 262 | + $paramsBefore = $methodBefore->params; |
| 263 | + $paramsAfter = $methodAfter->params; |
| 264 | + |
| 265 | + $isSafeNullableChange = false; |
| 266 | + // Check if only difference is added explicit nullable `?` prefix |
| 267 | + foreach ($paramsBefore as $index => $paramBefore) { |
| 268 | + $paramAfter = $paramsAfter[$index] ?? null; |
| 269 | + if (!$paramAfter) { |
| 270 | + continue; |
| 271 | + } |
| 272 | + |
| 273 | + $beforeType = $paramBefore->type; |
| 274 | + $afterType = $paramAfter->type; |
| 275 | + |
| 276 | + if ($beforeType && $afterType && |
| 277 | + $beforeType instanceof \PhpParser\Node\Name && |
| 278 | + $afterType instanceof \PhpParser\Node\NullableType && |
| 279 | + $afterType->type instanceof \PhpParser\Node\Name && |
| 280 | + $beforeType->toString() === $afterType->type->toString()) { |
| 281 | + $isSafeNullableChange = true; |
| 282 | + } else { |
| 283 | + $isSafeNullableChange = false; |
| 284 | + break; |
| 285 | + } |
| 286 | + } |
| 287 | + if ($isSafeNullableChange) { |
| 288 | + $data = new ClassMethodParameterTypingChangedNullable( |
| 289 | + $this->context, |
| 290 | + $this->fileAfter, |
| 291 | + $contextAfter, |
| 292 | + $methodAfter |
| 293 | + ); |
| 294 | + } else { |
| 295 | + $data = new ClassMethodParameterTypingChanged( |
| 296 | + $this->context, |
| 297 | + $this->fileAfter, |
| 298 | + $contextAfter, |
| 299 | + $methodAfter |
| 300 | + ); |
| 301 | + } |
272 | 302 | $report->add($this->context, $data);
|
273 | 303 | $signatureChanged = true;
|
274 | 304 | }
|
|
0 commit comments