From fc89d6e71e32da072323b1841c39d1cb6ee56e8e Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 8 Sep 2026 22:17:28 +0200 Subject: [PATCH] [Arguments] Fix ReplaceArgumentDefaultValueRector re-applying already-migrated imported class constant and report change in applied rules --- ...p_imported_class_const_already_replaced.php.inc | 14 ++++++++++++++ .../config/configured_rule.php | 8 ++++++++ rules/Arguments/ArgumentDefaultValueReplacer.php | 1 - .../ReplaceArgumentDefaultValueRector.php | 4 ++-- 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/Fixture/skip_imported_class_const_already_replaced.php.inc diff --git a/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/Fixture/skip_imported_class_const_already_replaced.php.inc b/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/Fixture/skip_imported_class_const_already_replaced.php.inc new file mode 100644 index 00000000000..3a7de21b915 --- /dev/null +++ b/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/Fixture/skip_imported_class_const_already_replaced.php.inc @@ -0,0 +1,14 @@ +sortBy(SomeSortableObject::SORT_ORDER_DESC); + } +} diff --git a/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/config/configured_rule.php b/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/config/configured_rule.php index 01cac798d2b..ec9981d829a 100644 --- a/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/config/configured_rule.php +++ b/rules-tests/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector/config/configured_rule.php @@ -94,5 +94,13 @@ 'ASC', 'self::SORT_ORDER_DESC' ), + + new ReplaceArgumentDefaultValue( + SomeSortableObject::class, + 'sortBy', + 0, + 'DESC', + SomeSortableObject::class . '::SORT_ORDER_DESC' + ), ]); }; diff --git a/rules/Arguments/ArgumentDefaultValueReplacer.php b/rules/Arguments/ArgumentDefaultValueReplacer.php index d43128aa991..16527bc1502 100644 --- a/rules/Arguments/ArgumentDefaultValueReplacer.php +++ b/rules/Arguments/ArgumentDefaultValueReplacer.php @@ -165,7 +165,6 @@ private function processArgs( $normalizedValueAfter = $this->normalizeValue($replaceArgumentDefaultValue->getValueAfter()); if ($particularArg->value instanceof ClassConstFetch && $particularArg->value->class instanceof Name - && $particularArg->value->class->isSpecialClassName() && $normalizedValueAfter instanceof ClassConstFetch && is_string($replaceArgumentDefaultValue->getValueAfter()) && str_contains($replaceArgumentDefaultValue->getValueAfter(), '::')) { diff --git a/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php b/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php index 2159a2a5826..c76b245d6f7 100644 --- a/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php +++ b/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php @@ -105,7 +105,7 @@ public function refactor(Node $node): MethodCall|StaticCall|ClassMethod|New_|nul $currentNode, $replaceArgumentDefaultValue ); - if ($replacedNode !== null && $replacedNode !== $currentNode) { + if ($replacedNode !== null) { $currentNode = $replacedNode; $hasChanged = true; } @@ -142,7 +142,7 @@ private function refactorNew(New_ $new): ?New_ $currentNode, $replaceArgumentDefaultValue ); - if ($replacedNode !== null && $replacedNode !== $currentNode) { + if ($replacedNode !== null) { $currentNode = $replacedNode; $hasChanged = true; }