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 @@ +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; }