From 6b271c7704ccda5ae655474b6c4bb3d95363fa57 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 14 Nov 2025 19:50:45 +0700 Subject: [PATCH 1/2] [Unambiguous] Skip return different object on FluentSettersToStandaloneCallMethodRector --- .../Fixture/skip_return_different_object.php.inc | 15 +++++++++++++++ .../Source/SetNameCaller.php | 11 +++++++++++ .../Source/SurnameCaller.php | 11 +++++++++++ 3 files changed, 37 insertions(+) create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_return_different_object.php.inc create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SetNameCaller.php create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SurnameCaller.php diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_return_different_object.php.inc b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_return_different_object.php.inc new file mode 100644 index 00000000000..e35c779ec74 --- /dev/null +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_return_different_object.php.inc @@ -0,0 +1,15 @@ +setName('John') + ->setSurname('Doe'); + } +} diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SetNameCaller.php b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SetNameCaller.php new file mode 100644 index 00000000000..fff1443bed3 --- /dev/null +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SetNameCaller.php @@ -0,0 +1,11 @@ + Date: Fri, 14 Nov 2025 19:54:56 +0700 Subject: [PATCH 2/2] fix --- ...FluentSettersToStandaloneCallMethodRector.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php index f8f20a29626..f9da5bf3e9e 100644 --- a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php +++ b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php @@ -98,12 +98,28 @@ public function refactor(Node $node): ?array $methodCalls = []; $currentMethodCall = $firstMethodCall; + $classNameObjectType = null; while ($currentMethodCall instanceof MethodCall) { + if ($currentMethodCall->isFirstClassCallable()) { + return null; + } + // must be exactly one argument if (count($currentMethodCall->getArgs()) !== 1) { return null; } + $objectType = $this->getType($currentMethodCall->var); + if (! $objectType instanceof ObjectType) { + return null; + } + + if ($classNameObjectType === null) { + $classNameObjectType = $objectType->getClassName(); + } elseif ($classNameObjectType !== $objectType->getClassName()) { + return null; + } + $methodCalls[] = $currentMethodCall; $currentMethodCall = $currentMethodCall->var; }