Skip to content

Commit c3d8f37

Browse files
committed
ReflectionProvider::supportsAnonymousClasses() - to skip getAnonymousClass in ClassWhitelistReflectionProvider
1 parent af8ac06 commit c3d8f37

File tree

6 files changed

+45
-2
lines changed

6 files changed

+45
-2
lines changed

src/Broker/Broker.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ public function getClassName(string $className): string
7777
return $this->reflectionProvider->getClassName($className);
7878
}
7979

80+
public function supportsAnonymousClasses(): bool
81+
{
82+
return true;
83+
}
84+
8085
public function getAnonymousClassReflection(\PhpParser\Node\Stmt\Class_ $classNode, Scope $scope): ClassReflection
8186
{
8287
return $this->reflectionProvider->getAnonymousClassReflection($classNode, $scope);

src/Reflection/BetterReflection/BetterReflectionProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@ public function getClassName(string $className): string
165165
return $reflectionClass->getName();
166166
}
167167

168+
public function supportsAnonymousClasses(): bool
169+
{
170+
return true;
171+
}
172+
168173
public function getAnonymousClassReflection(\PhpParser\Node\Stmt\Class_ $classNode, Scope $scope): ClassReflection
169174
{
170175
if (isset($classNode->namespacedName)) {

src/Reflection/ReflectionProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public function getClass(string $className): ClassReflection;
1313

1414
public function getClassName(string $className): string;
1515

16+
public function supportsAnonymousClasses(): bool;
17+
1618
public function getAnonymousClassReflection(
1719
\PhpParser\Node\Stmt\Class_ $classNode,
1820
Scope $scope

src/Reflection/ReflectionProvider/ChainReflectionProvider.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,30 @@ public function getClassName(string $className): string
6363
throw new \PHPStan\Broker\ClassNotFoundException($className);
6464
}
6565

66+
public function supportsAnonymousClasses(): bool
67+
{
68+
foreach ($this->providers as $provider) {
69+
if (!$provider->supportsAnonymousClasses()) {
70+
continue;
71+
}
72+
73+
return true;
74+
}
75+
76+
return false;
77+
}
78+
6679
public function getAnonymousClassReflection(\PhpParser\Node\Stmt\Class_ $classNode, Scope $scope): ClassReflection
6780
{
68-
return $this->providers[0]->getAnonymousClassReflection($classNode, $scope);
81+
foreach ($this->providers as $provider) {
82+
if (!$provider->supportsAnonymousClasses()) {
83+
continue;
84+
}
85+
86+
return $provider->getAnonymousClassReflection($classNode, $scope);
87+
}
88+
89+
throw new \PHPStan\ShouldNotHappenException();
6990
}
7091

7192
public function hasFunction(\PhpParser\Node\Name $nameNode, ?Scope $scope): bool

src/Reflection/ReflectionProvider/ClassWhitelistReflectionProvider.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,14 @@ public function getClassName(string $className): string
6262
return $this->reflectionProvider->getClassName($className);
6363
}
6464

65+
public function supportsAnonymousClasses(): bool
66+
{
67+
return false;
68+
}
69+
6570
public function getAnonymousClassReflection(\PhpParser\Node\Stmt\Class_ $classNode, Scope $scope): ClassReflection
6671
{
67-
return $this->reflectionProvider->getAnonymousClassReflection($classNode, $scope);
72+
throw new \PHPStan\ShouldNotHappenException();
6873
}
6974

7075
public function hasFunction(\PhpParser\Node\Name $nameNode, ?Scope $scope): bool

src/Reflection/Runtime/RuntimeReflectionProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ public function getClassName(string $className): string
142142
return $realName;
143143
}
144144

145+
public function supportsAnonymousClasses(): bool
146+
{
147+
return true;
148+
}
149+
145150
public function getAnonymousClassReflection(
146151
\PhpParser\Node\Stmt\Class_ $classNode,
147152
Scope $scope

0 commit comments

Comments
 (0)