Skip to content

Commit 9e93740

Browse files
authored
[TypeDeclarationDocblocks] Use unique type when all types equals on AddReturnDocblockForCommonObjectDenominatorRector (#7254)
* [TypeDeclarationDocblocks] Use unique type when all types equals on AddReturnDocblockForCommonObjectDenominatorRector * Fix
1 parent 01a21ae commit 9e93740

2 files changed

Lines changed: 49 additions & 6 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddReturnDocblockForCommonObjectDenominatorRector\Fixture;
4+
5+
final class UniqueTypeSingle
6+
{
7+
public function getExtensions(): array
8+
{
9+
return [
10+
new \DateTime('now'),
11+
new \DateTime('tomorrow'),
12+
];
13+
}
14+
}
15+
16+
?>
17+
-----
18+
<?php
19+
20+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddReturnDocblockForCommonObjectDenominatorRector\Fixture;
21+
22+
final class UniqueTypeSingle
23+
{
24+
/**
25+
* @return \DateTime[]
26+
*/
27+
public function getExtensions(): array
28+
{
29+
return [
30+
new \DateTime('now'),
31+
new \DateTime('tomorrow'),
32+
];
33+
}
34+
}
35+
36+
?>

rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,21 @@ public function refactor(Node $node): ?Node
147147
return null;
148148
}
149149

150-
$parentClassesAndInterfaces = [];
150+
$uniqueReferencedClasses = array_unique($referencedClasses, SORT_REGULAR);
151151

152-
foreach ($referencedClasses as $referencedClass) {
153-
$parentClassesAndInterfaces[] = $this->resolveParentClassesAndInterfaces($referencedClass);
154-
}
152+
if (count($uniqueReferencedClasses) === 1) {
153+
$firstSharedType = $uniqueReferencedClasses[0];
154+
} else {
155+
156+
$parentClassesAndInterfaces = [];
155157

156-
$firstSharedTypes = array_intersect(...$parentClassesAndInterfaces);
157-
$firstSharedType = $firstSharedTypes[0] ?? null;
158+
foreach ($referencedClasses as $referencedClass) {
159+
$parentClassesAndInterfaces[] = $this->resolveParentClassesAndInterfaces($referencedClass);
160+
}
161+
162+
$firstSharedTypes = array_intersect(...$parentClassesAndInterfaces);
163+
$firstSharedType = $firstSharedTypes[0] ?? null;
164+
}
158165

159166
if ($firstSharedType === null) {
160167
return null;

0 commit comments

Comments
 (0)