2626use PHPStan \PhpDoc \Tag \TypeAliasTag ;
2727use PHPStan \Reflection \Php \PhpClassReflectionExtension ;
2828use PHPStan \Reflection \Php \PhpPropertyReflection ;
29+ use PHPStan \Reflection \Php \UniversalObjectCratesClassReflectionExtension ;
2930use PHPStan \Reflection \SignatureMap \SignatureMapProvider ;
3031use PHPStan \ShouldNotHappenException ;
3132use PHPStan \Type \CircularTypeAliasDefinitionException ;
4546use PHPStan \Type \TypehintHelper ;
4647use PHPStan \Type \VerbosityLevel ;
4748use ReflectionException ;
48- use stdClass ;
4949use function array_diff ;
5050use function array_filter ;
5151use function array_key_exists ;
@@ -131,6 +131,7 @@ class ClassReflection
131131 * @param PropertiesClassReflectionExtension[] $propertiesClassReflectionExtensions
132132 * @param MethodsClassReflectionExtension[] $methodsClassReflectionExtensions
133133 * @param AllowedSubTypesClassReflectionExtension[] $allowedSubTypesClassReflectionExtensions
134+ * @param string[] $universalObjectCratesClasses
134135 */
135136 public function __construct (
136137 private ReflectionProvider $ reflectionProvider ,
@@ -148,6 +149,7 @@ public function __construct(
148149 private ?string $ anonymousFilename ,
149150 private ?TemplateTypeMap $ resolvedTemplateTypeMap ,
150151 private ?ResolvedPhpDocBlock $ stubPhpDocBlock ,
152+ private array $ universalObjectCratesClasses ,
151153 private ?string $ extraCacheKey = null ,
152154 private ?TemplateTypeVarianceMap $ resolvedCallSiteVarianceMap = null ,
153155 )
@@ -389,7 +391,11 @@ public function allowsDynamicProperties(): bool
389391 return false ;
390392 }
391393
392- if ($ this ->is (stdClass::class)) {
394+ if (UniversalObjectCratesClassReflectionExtension::isUniversalObjectCrate (
395+ $ this ->reflectionProvider ,
396+ $ this ->universalObjectCratesClasses ,
397+ $ this ,
398+ )) {
393399 return true ;
394400 }
395401
@@ -1412,6 +1418,7 @@ public function withTypes(array $types): self
14121418 $ this ->anonymousFilename ,
14131419 $ this ->typeMapFromList ($ types ),
14141420 $ this ->stubPhpDocBlock ,
1421+ $ this ->universalObjectCratesClasses ,
14151422 null ,
14161423 $ this ->resolvedCallSiteVarianceMap ,
14171424 );
@@ -1438,6 +1445,7 @@ public function withVariances(array $variances): self
14381445 $ this ->anonymousFilename ,
14391446 $ this ->resolvedTemplateTypeMap ,
14401447 $ this ->stubPhpDocBlock ,
1448+ $ this ->universalObjectCratesClasses ,
14411449 null ,
14421450 $ this ->varianceMapFromList ($ variances ),
14431451 );
0 commit comments