26
26
use PHPStan \PhpDoc \Tag \TypeAliasTag ;
27
27
use PHPStan \Reflection \Php \PhpClassReflectionExtension ;
28
28
use PHPStan \Reflection \Php \PhpPropertyReflection ;
29
+ use PHPStan \Reflection \Php \UniversalObjectCratesClassReflectionExtension ;
29
30
use PHPStan \Reflection \SignatureMap \SignatureMapProvider ;
30
31
use PHPStan \ShouldNotHappenException ;
31
32
use PHPStan \Type \CircularTypeAliasDefinitionException ;
45
46
use PHPStan \Type \TypehintHelper ;
46
47
use PHPStan \Type \VerbosityLevel ;
47
48
use ReflectionException ;
48
- use stdClass ;
49
49
use function array_diff ;
50
50
use function array_filter ;
51
51
use function array_key_exists ;
@@ -131,6 +131,7 @@ class ClassReflection
131
131
* @param PropertiesClassReflectionExtension[] $propertiesClassReflectionExtensions
132
132
* @param MethodsClassReflectionExtension[] $methodsClassReflectionExtensions
133
133
* @param AllowedSubTypesClassReflectionExtension[] $allowedSubTypesClassReflectionExtensions
134
+ * @param string[] $universalObjectCratesClasses
134
135
*/
135
136
public function __construct (
136
137
private ReflectionProvider $ reflectionProvider ,
@@ -148,6 +149,7 @@ public function __construct(
148
149
private ?string $ anonymousFilename ,
149
150
private ?TemplateTypeMap $ resolvedTemplateTypeMap ,
150
151
private ?ResolvedPhpDocBlock $ stubPhpDocBlock ,
152
+ private array $ universalObjectCratesClasses ,
151
153
private ?string $ extraCacheKey = null ,
152
154
private ?TemplateTypeVarianceMap $ resolvedCallSiteVarianceMap = null ,
153
155
)
@@ -389,7 +391,11 @@ public function allowsDynamicProperties(): bool
389
391
return false ;
390
392
}
391
393
392
- if ($ this ->is (stdClass::class)) {
394
+ if (UniversalObjectCratesClassReflectionExtension::isUniversalObjectCrate (
395
+ $ this ->reflectionProvider ,
396
+ $ this ->universalObjectCratesClasses ,
397
+ $ this ,
398
+ )) {
393
399
return true ;
394
400
}
395
401
@@ -1412,6 +1418,7 @@ public function withTypes(array $types): self
1412
1418
$ this ->anonymousFilename ,
1413
1419
$ this ->typeMapFromList ($ types ),
1414
1420
$ this ->stubPhpDocBlock ,
1421
+ $ this ->universalObjectCratesClasses ,
1415
1422
null ,
1416
1423
$ this ->resolvedCallSiteVarianceMap ,
1417
1424
);
@@ -1438,6 +1445,7 @@ public function withVariances(array $variances): self
1438
1445
$ this ->anonymousFilename ,
1439
1446
$ this ->resolvedTemplateTypeMap ,
1440
1447
$ this ->stubPhpDocBlock ,
1448
+ $ this ->universalObjectCratesClasses ,
1441
1449
null ,
1442
1450
$ this ->varianceMapFromList ($ variances ),
1443
1451
);
0 commit comments