From aaf5fd56b39c23066562eee4a29b12d368c13418 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 19:02:55 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Use unique type when all types equals on AddReturnDocblockForCommonObjectDenominatorRector --- .../Fixture/unique_type_single.php.inc | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector/Fixture/unique_type_single.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector/Fixture/unique_type_single.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector/Fixture/unique_type_single.php.inc new file mode 100644 index 00000000000..fd6e97d996a --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector/Fixture/unique_type_single.php.inc @@ -0,0 +1,36 @@ + +----- + From 7b53617ffbe3e0bb1ef349f04f80e8ea06daae99 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 19:09:44 +0700 Subject: [PATCH 2/2] Fix --- ...cblockForCommonObjectDenominatorRector.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php index 47073b89061..b699c423dbc 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php @@ -147,14 +147,21 @@ public function refactor(Node $node): ?Node return null; } - $parentClassesAndInterfaces = []; + $uniqueReferencedClasses = array_unique($referencedClasses, SORT_REGULAR); - foreach ($referencedClasses as $referencedClass) { - $parentClassesAndInterfaces[] = $this->resolveParentClassesAndInterfaces($referencedClass); - } + if (count($uniqueReferencedClasses) === 1) { + $firstSharedType = $uniqueReferencedClasses[0]; + } else { + + $parentClassesAndInterfaces = []; - $firstSharedTypes = array_intersect(...$parentClassesAndInterfaces); - $firstSharedType = $firstSharedTypes[0] ?? null; + foreach ($referencedClasses as $referencedClass) { + $parentClassesAndInterfaces[] = $this->resolveParentClassesAndInterfaces($referencedClass); + } + + $firstSharedTypes = array_intersect(...$parentClassesAndInterfaces); + $firstSharedType = $firstSharedTypes[0] ?? null; + } if ($firstSharedType === null) { return null;