From 98113135cdb855cc6b4ed39f8526372387ddc20e Mon Sep 17 00:00:00 2001 From: Junaid Hussnain <84363665+Junaid-PK@users.noreply.github.com> Date: Tue, 4 Aug 2026 02:54:13 +0500 Subject: [PATCH 1/3] Skip constructor defaults on extensible classes --- .../Fixture/skip_non_final_class.php.inc | 23 +++++++++++++++++++ ...lineConstructorDefaultToPropertyRector.php | 5 ++++ 2 files changed, 28 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc diff --git a/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc new file mode 100644 index 00000000000..9b1adad7b09 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc @@ -0,0 +1,23 @@ +validate(); + $this->validated = true; + } + + private function validate(): void + { + } +} + +final class SkipsParentConstructor extends ValidatedBase +{ + public function __construct() + { + } +} diff --git a/rules/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector.php b/rules/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector.php index 83ef9f3b268..5ab4ee0e4e1 100644 --- a/rules/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector.php +++ b/rules/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector.php @@ -82,6 +82,11 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { + // A child class may bypass the constructor and depend on the declared property default + if (! $node->isFinal()) { + return null; + } + $hasChanged = false; $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); From a47635de1ed5cc39cd49f535d5e1e33c168f1f7c Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 6 Aug 2026 17:17:28 +0200 Subject: [PATCH 2/3] [Testing] Move ValidatedBase to Source/, namespace the skip fixture --- .../Fixture/skip_non_final_class.php.inc | 19 ++++++------------- .../Source/ValidatedBase.php | 12 ++++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Source/ValidatedBase.php diff --git a/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc index 9b1adad7b09..48dc3be73b6 100644 --- a/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc +++ b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Fixture/skip_non_final_class.php.inc @@ -1,23 +1,16 @@ validate(); $this->validated = true; } - - private function validate(): void - { - } -} - -final class SkipsParentConstructor extends ValidatedBase -{ - public function __construct() - { - } } diff --git a/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Source/ValidatedBase.php b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Source/ValidatedBase.php new file mode 100644 index 00000000000..d48c323415a --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/InlineConstructorDefaultToPropertyRector/Source/ValidatedBase.php @@ -0,0 +1,12 @@ + Date: Sat, 8 Aug 2026 20:09:03 +0200 Subject: [PATCH 3/3] fixup! [Testing] Move ValidatedBase to Source/, namespace the skip fixture --- src/Bridge/SetProviderCollector.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Bridge/SetProviderCollector.php b/src/Bridge/SetProviderCollector.php index 5d96f7342fc..c78b770acf5 100644 --- a/src/Bridge/SetProviderCollector.php +++ b/src/Bridge/SetProviderCollector.php @@ -25,8 +25,9 @@ /** * @param SetProviderInterface[] $setProviders */ - public function __construct(private array $setProviders = []) - { + public function __construct( + private array $setProviders = [] + ) { } /**