Skip to content

Commit 714877b

Browse files
committed
Introduce @internal getOnlyVariant() method on FunctionReflection/ExtendedMethodReflection to use instead of selectSingle()
1 parent 1322aaf commit 714877b

28 files changed

+149
-43
lines changed

src/Analyser/MutatingScope.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5514,7 +5514,7 @@ private function exactInstantiation(New_ $node, string $className): ?Type
55145514

55155515
$assignedToProperty = $node->getAttribute(NewAssignedToPropertyVisitor::ATTRIBUTE_NAME);
55165516
if ($assignedToProperty !== null) {
5517-
$constructorVariant = ParametersAcceptorSelector::selectSingle($constructorMethod->getVariants());
5517+
$constructorVariant = $constructorMethod->getOnlyVariant();
55185518
$classTemplateTypes = $classReflection->getTemplateTypeMap()->getTypes();
55195519
$originalClassTemplateTypes = $classTemplateTypes;
55205520
foreach ($constructorVariant->getParameters() as $parameter) {

src/Reflection/Annotations/AnnotationMethodReflection.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\Reflection\ClassReflection;
88
use PHPStan\Reflection\ExtendedMethodReflection;
99
use PHPStan\Reflection\FunctionVariantWithPhpDocs;
10+
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
1011
use PHPStan\TrinaryLogic;
1112
use PHPStan\Type\Generic\TemplateTypeMap;
1213
use PHPStan\Type\MixedType;
@@ -83,6 +84,11 @@ public function getVariants(): array
8384
return $this->variants;
8485
}
8586

87+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
88+
{
89+
return $this->getVariants()[0];
90+
}
91+
8692
public function getNamedArgumentsVariants(): ?array
8793
{
8894
return null;

src/Reflection/ClassReflection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1305,7 +1305,7 @@ private function findAttributeFlags(): ?int
13051305
return null;
13061306
}
13071307
$attributeConstructor = $attributeClass->getConstructor();
1308-
$attributeConstructorVariant = ParametersAcceptorSelector::selectSingle($attributeConstructor->getVariants());
1308+
$attributeConstructorVariant = $attributeConstructor->getOnlyVariant();
13091309

13101310
if (count($arguments) === 0) {
13111311
$flagType = $attributeConstructorVariant->getParameters()[0]->getDefaultValue();

src/Reflection/Dummy/ChangedTypeMethodReflection.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
use PHPStan\Reflection\ClassReflection;
88
use PHPStan\Reflection\ExtendedMethodReflection;
99
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
10+
use PHPStan\ShouldNotHappenException;
1011
use PHPStan\TrinaryLogic;
1112
use PHPStan\Type\Type;
13+
use function count;
1214
use function is_bool;
1315

1416
final class ChangedTypeMethodReflection implements ExtendedMethodReflection
@@ -62,6 +64,16 @@ public function getVariants(): array
6264
return $this->variants;
6365
}
6466

67+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
68+
{
69+
$variants = $this->getVariants();
70+
if (count($variants) !== 1) {
71+
throw new ShouldNotHappenException();
72+
}
73+
74+
return $variants[0];
75+
}
76+
6577
public function getNamedArgumentsVariants(): ?array
6678
{
6779
return $this->namedArgumentsVariants;

src/Reflection/Dummy/DummyConstructorReflection.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\Reflection\ClassReflection;
88
use PHPStan\Reflection\ExtendedMethodReflection;
99
use PHPStan\Reflection\FunctionVariantWithPhpDocs;
10+
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
1011
use PHPStan\TrinaryLogic;
1112
use PHPStan\Type\Generic\TemplateTypeMap;
1213
use PHPStan\Type\MixedType;
@@ -66,6 +67,11 @@ public function getVariants(): array
6667
];
6768
}
6869

70+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
71+
{
72+
return $this->getVariants()[0];
73+
}
74+
6975
public function getNamedArgumentsVariants(): ?array
7076
{
7177
return null;

src/Reflection/Dummy/DummyMethodReflection.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PHPStan\Reflection\ClassMemberReflection;
77
use PHPStan\Reflection\ClassReflection;
88
use PHPStan\Reflection\ExtendedMethodReflection;
9+
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
910
use PHPStan\Reflection\ReflectionProviderStaticAccessor;
1011
use PHPStan\Reflection\TrivialParametersAcceptor;
1112
use PHPStan\TrinaryLogic;
@@ -58,6 +59,11 @@ public function getVariants(): array
5859
];
5960
}
6061

62+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
63+
{
64+
return $this->getVariants()[0];
65+
}
66+
6167
public function getNamedArgumentsVariants(): ?array
6268
{
6369
return null;

src/Reflection/ExtendedMethodReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ interface ExtendedMethodReflection extends MethodReflection
2727
*/
2828
public function getVariants(): array;
2929

30+
/**
31+
* @internal
32+
*/
33+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs;
34+
3035
/**
3136
* @return ParametersAcceptorWithPhpDocs[]|null
3237
*/

src/Reflection/FunctionReflection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public function getFileName(): ?string;
1818
*/
1919
public function getVariants(): array;
2020

21+
/**
22+
* @internal
23+
*/
24+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs;
25+
2126
/**
2227
* @return ParametersAcceptorWithPhpDocs[]|null
2328
*/

src/Reflection/Native/NativeFunctionReflection.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
use PHPStan\Reflection\Assertions;
66
use PHPStan\Reflection\FunctionReflection;
77
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
8+
use PHPStan\ShouldNotHappenException;
89
use PHPStan\TrinaryLogic;
910
use PHPStan\Type\Type;
11+
use function count;
1012

1113
final class NativeFunctionReflection implements FunctionReflection
1214
{
@@ -46,14 +48,21 @@ public function getFileName(): ?string
4648
return null;
4749
}
4850

49-
/**
50-
* @return ParametersAcceptorWithPhpDocs[]
51-
*/
5251
public function getVariants(): array
5352
{
5453
return $this->variants;
5554
}
5655

56+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
57+
{
58+
$variants = $this->getVariants();
59+
if (count($variants) !== 1) {
60+
throw new ShouldNotHappenException();
61+
}
62+
63+
return $variants[0];
64+
}
65+
5766
public function getNamedArgumentsVariants(): ?array
5867
{
5968
return $this->namedArgumentsVariants;

src/Reflection/Native/NativeMethodReflection.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
use PHPStan\Reflection\ParametersAcceptorWithPhpDocs;
1111
use PHPStan\Reflection\Php\BuiltinMethodReflection;
1212
use PHPStan\Reflection\ReflectionProvider;
13+
use PHPStan\ShouldNotHappenException;
1314
use PHPStan\TrinaryLogic;
1415
use PHPStan\Type\Type;
1516
use PHPStan\Type\TypehintHelper;
1617
use ReflectionException;
18+
use function count;
1719
use function strtolower;
1820

1921
final class NativeMethodReflection implements ExtendedMethodReflection
@@ -109,6 +111,16 @@ public function getVariants(): array
109111
return $this->variants;
110112
}
111113

114+
public function getOnlyVariant(): ParametersAcceptorWithPhpDocs
115+
{
116+
$variants = $this->getVariants();
117+
if (count($variants) !== 1) {
118+
throw new ShouldNotHappenException();
119+
}
120+
121+
return $variants[0];
122+
}
123+
112124
public function getNamedArgumentsVariants(): ?array
113125
{
114126
return $this->namedArgumentsVariants;

0 commit comments

Comments
 (0)