From 057c6c692c0c0f997fe17df8e7a1f81f2e1d5210 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 28 Jul 2026 17:04:30 +0700 Subject: [PATCH 1/4] [DeadCode] Skip protected property on non-final class on RemoveDefaultValueFromAssignedPropertyRector-a --- ..._protected_property_on_non_final_class.php.inc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc diff --git a/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc new file mode 100644 index 00000000000..7ea3c4bfab7 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc @@ -0,0 +1,15 @@ +value = $value; + } +} + +?> \ No newline at end of file From da22f1c38ae5cf2ebb23f3cf1147cff1e172fc04 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 28 Jul 2026 17:04:32 +0700 Subject: [PATCH 2/4] [DeadCode] Skip protected property on non-final class on RemoveDefaultValueFromAssignedPropertyRector --- .../Fixture/skip_protected_property_on_non_final_class.php.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc index 7ea3c4bfab7..90dd315ebe5 100644 --- a/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc +++ b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc @@ -4,7 +4,7 @@ namespace Rector\Tests\DeadCode\Rector\Property\RemoveDefaultValueFromAssignedPr class SkipProtectedPropertyOnNonFinalClass { - private int $value = 5; + protected int $value = 5; public function __construct(int $value) { From 1bbf85904581001fe7ca1d430251a1503e1b5c9b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 28 Jul 2026 17:05:26 +0700 Subject: [PATCH 3/4] eol --- .../Fixture/skip_protected_property_on_non_final_class.php.inc | 2 -- 1 file changed, 2 deletions(-) diff --git a/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc index 90dd315ebe5..f595777395e 100644 --- a/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc +++ b/rules-tests/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector/Fixture/skip_protected_property_on_non_final_class.php.inc @@ -11,5 +11,3 @@ class SkipProtectedPropertyOnNonFinalClass $this->value = $value; } } - -?> \ No newline at end of file From 2bab652b38ed023ed662651be47985e2e07740af Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 28 Jul 2026 17:06:40 +0700 Subject: [PATCH 4/4] fix --- .../RemoveDefaultValueFromAssignedPropertyRector.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rules/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector.php b/rules/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector.php index e00ac05b75e..ca54313c38b 100644 --- a/rules/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector.php +++ b/rules/DeadCode/Rector/Property/RemoveDefaultValueFromAssignedPropertyRector.php @@ -11,6 +11,7 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; +use Rector\Configuration\Parameter\FeatureFlags; use Rector\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; @@ -89,6 +90,7 @@ public function refactor(Node $node): ?Node } $hasChanged = false; + $isFinal = $node->isFinal() || FeatureFlags::treatClassesAsFinal($node); foreach ($node->getProperties() as $property) { // untyped properties are handled by RemoveNullPropertyInitializationRector @@ -100,6 +102,10 @@ public function refactor(Node $node): ?Node continue; } + if (! $property->isPrivate() && ! $isFinal) { + continue; + } + foreach ($property->props as $propertyProperty) { if (! $propertyProperty->default instanceof Expr) { continue;