From fa352bf0b5918cd5f62829a8ddba3c9bdca5007d Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 5 Aug 2025 21:26:49 +0700 Subject: [PATCH 1/3] [Php80] Skip not match property hook type with parameter type on ClassPropertyAssignToConstructorPromotionRector --- .../skip_not_match_property_hook_type.php.inc | 17 +++++++++++++++++ ...opertyAssignToConstructorPromotionRector.php | 6 ++++++ 2 files changed, 23 insertions(+) create mode 100644 rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc diff --git a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc new file mode 100644 index 00000000000..ec883b8ec81 --- /dev/null +++ b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc @@ -0,0 +1,17 @@ +origin = is_array($origin) ? (object) $origin : clone $origin; + } + } + + public function __construct( + array|\stdClass $origin + ) { + $this->origin = $origin; + } +} \ No newline at end of file diff --git a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index ecfd80ce807..99a844095d7 100644 --- a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -206,6 +206,12 @@ public function refactor(Node $node): ?Node continue; } + if ($property->type instanceof Node + && $property->hooks !== [] + && ! $this->nodeComparator->areNodesEqual($property->type, $param->type)) { + continue; + } + $hasChanged = true; // remove property from class From 01d3fe1b6187e28b6d4f3e45ceda7971e0599420 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 5 Aug 2025 21:28:01 +0700 Subject: [PATCH 2/3] eol --- .../Fixture/skip_not_match_property_hook_type.php.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc index ec883b8ec81..5d31dfdf104 100644 --- a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc +++ b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/skip_not_match_property_hook_type.php.inc @@ -14,4 +14,4 @@ class SkipNotMatchPropertyHookType { ) { $this->origin = $origin; } -} \ No newline at end of file +} From 2e48ff141c82cfb974f52f036982b05ab76891ab Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 5 Aug 2025 21:29:16 +0700 Subject: [PATCH 3/3] fix per use case --- .../Class_/ClassPropertyAssignToConstructorPromotionRector.php | 1 + 1 file changed, 1 insertion(+) diff --git a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index 99a844095d7..89cf185b7dd 100644 --- a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -207,6 +207,7 @@ public function refactor(Node $node): ?Node } if ($property->type instanceof Node + && $param->type instanceof Node && $property->hooks !== [] && ! $this->nodeComparator->areNodesEqual($property->type, $param->type)) { continue;