Skip to content

Commit ee802d6

Browse files
ManuelHuondrejmirtes
authored andcommitted
Reflection getAttributes returns list
1 parent f7f2be8 commit ee802d6

7 files changed

+25
-24
lines changed

Diff for: src/Type/Php/ReflectionGetAttributesMethodReturnTypeExtension.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
use PhpParser\Node\Expr\MethodCall;
66
use PHPStan\Analyser\Scope;
77
use PHPStan\Reflection\MethodReflection;
8+
use PHPStan\Type\Accessory\AccessoryArrayListType;
89
use PHPStan\Type\ArrayType;
910
use PHPStan\Type\DynamicMethodReturnTypeExtension;
1011
use PHPStan\Type\Generic\GenericObjectType;
11-
use PHPStan\Type\MixedType;
12+
use PHPStan\Type\IntegerType;
1213
use PHPStan\Type\Type;
1314
use ReflectionAttribute;
1415
use function count;
@@ -42,7 +43,7 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
4243
$argType = $scope->getType($methodCall->getArgs()[0]->value);
4344
$classType = $argType->getClassStringObjectType();
4445

45-
return new ArrayType(new MixedType(), new GenericObjectType(ReflectionAttribute::class, [$classType]));
46+
return AccessoryArrayListType::intersectWith(new ArrayType(new IntegerType(), new GenericObjectType(ReflectionAttribute::class, [$classType])));
4647
}
4748

4849
}

Diff for: stubs/ReflectionClass.stub

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class ReflectionClass
4242
public function newInstanceWithoutConstructor();
4343

4444
/**
45-
* @return array<ReflectionAttribute<object>>
45+
* @return list<ReflectionAttribute<object>>
4646
*/
4747
public function getAttributes(?string $name = null, int $flags = 0)
4848
{

Diff for: stubs/ReflectionClassConstant.stub

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ReflectionClassConstant
44
{
55
/**
6-
* @return array<ReflectionAttribute<object>>
6+
* @return list<ReflectionAttribute<object>>
77
*/
88
public function getAttributes(?string $name = null, int $flags = 0)
99
{

Diff for: stubs/ReflectionFunctionAbstract.stub

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ abstract class ReflectionFunctionAbstract
99
public function getFileName () {}
1010

1111
/**
12-
* @return array<ReflectionAttribute<object>>
12+
* @return list<ReflectionAttribute<object>>
1313
*/
1414
public function getAttributes(?string $name = null, int $flags = 0)
1515
{

Diff for: stubs/ReflectionParameter.stub

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ReflectionParameter
44
{
55
/**
6-
* @return array<ReflectionAttribute<object>>
6+
* @return list<ReflectionAttribute<object>>
77
*/
88
public function getAttributes(?string $name = null, int $flags = 0)
99
{

Diff for: stubs/ReflectionProperty.stub

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ReflectionProperty
44
{
55
/**
6-
* @return array<ReflectionAttribute<object>>
6+
* @return list<ReflectionAttribute<object>>
77
*/
88
public function getAttributes(?string $name = null, int $flags = 0)
99
{

Diff for: tests/PHPStan/Analyser/nsrt/reflectionclass-issue-5511-php8.php

+17-17
Original file line numberDiff line numberDiff line change
@@ -36,38 +36,38 @@ function testGetAttributes(
3636
$classStr = $reflectionClass->getAttributes($str);
3737
$classNonsense = $reflectionClass->getAttributes("some random string");
3838

39-
assertType('array<ReflectionAttribute<object>>', $classAll);
40-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $classAbc1);
41-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $classAbc2);
42-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $classGCN);
43-
assertType('array<ReflectionAttribute<object>>', $classCN);
44-
assertType('array<ReflectionAttribute<object>>', $classStr);
45-
assertType('array<ReflectionAttribute<*ERROR*>>', $classNonsense);
39+
assertType('list<ReflectionAttribute<object>>', $classAll);
40+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $classAbc1);
41+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $classAbc2);
42+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $classGCN);
43+
assertType('list<ReflectionAttribute<object>>', $classCN);
44+
assertType('list<ReflectionAttribute<object>>', $classStr);
45+
assertType('list<ReflectionAttribute<*ERROR*>>', $classNonsense);
4646

4747
$methodAll = $reflectionMethod->getAttributes();
4848
$methodAbc = $reflectionMethod->getAttributes(Abc::class);
49-
assertType('array<ReflectionAttribute<object>>', $methodAll);
50-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $methodAbc);
49+
assertType('list<ReflectionAttribute<object>>', $methodAll);
50+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $methodAbc);
5151

5252
$paramAll = $reflectionParameter->getAttributes();
5353
$paramAbc = $reflectionParameter->getAttributes(Abc::class);
54-
assertType('array<ReflectionAttribute<object>>', $paramAll);
55-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $paramAbc);
54+
assertType('list<ReflectionAttribute<object>>', $paramAll);
55+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $paramAbc);
5656

5757
$propAll = $reflectionProperty->getAttributes();
5858
$propAbc = $reflectionProperty->getAttributes(Abc::class);
59-
assertType('array<ReflectionAttribute<object>>', $propAll);
60-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $propAbc);
59+
assertType('list<ReflectionAttribute<object>>', $propAll);
60+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $propAbc);
6161

6262
$constAll = $reflectionClassConstant->getAttributes();
6363
$constAbc = $reflectionClassConstant->getAttributes(Abc::class);
64-
assertType('array<ReflectionAttribute<object>>', $constAll);
65-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $constAbc);
64+
assertType('list<ReflectionAttribute<object>>', $constAll);
65+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $constAbc);
6666

6767
$funcAll = $reflectionFunction->getAttributes();
6868
$funcAbc = $reflectionFunction->getAttributes(Abc::class);
69-
assertType('array<ReflectionAttribute<object>>', $funcAll);
70-
assertType('array<ReflectionAttribute<Issue5511\Abc>>', $funcAbc);
69+
assertType('list<ReflectionAttribute<object>>', $funcAll);
70+
assertType('list<ReflectionAttribute<Issue5511\Abc>>', $funcAbc);
7171
}
7272

7373
/**

0 commit comments

Comments
 (0)