Skip to content

Commit b537b97

Browse files
committed
Only consider class-strings when resolving dependencies
1 parent b21f537 commit b537b97

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/Dependency/DependencyResolver.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPStan\Reflection\ReflectionProvider;
1616
use PHPStan\Reflection\ReflectionWithFilename;
1717
use PHPStan\Type\ClosureType;
18+
use PHPStan\Type\Constant\ConstantStringType;
1819

1920
class DependencyResolver
2021
{
@@ -172,7 +173,10 @@ public function resolveDependencies(\PhpParser\Node $node, Scope $scope): array
172173
foreach ($exprType->getIterableValueType()->getReferencedClasses() as $referencedClass) {
173174
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
174175
}
175-
} elseif ($node instanceof Array_) {
176+
} elseif (
177+
$node instanceof Array_
178+
&& $this->considerArrayForCallableTest($scope, $node)
179+
) {
176180
$arrayType = $scope->getType($node);
177181
if (!$arrayType->isCallable()->no()) {
178182
foreach ($arrayType->getCallableParametersAcceptors($scope) as $variant) {
@@ -187,6 +191,20 @@ public function resolveDependencies(\PhpParser\Node $node, Scope $scope): array
187191
return $dependenciesReflections;
188192
}
189193

194+
private function considerArrayForCallableTest(Scope $scope, Array_ $arrayNode): bool
195+
{
196+
if (!isset($arrayNode->items[0])) {
197+
return false;
198+
}
199+
200+
$itemType = $scope->getType($arrayNode->items[0]->value);
201+
if (!$itemType instanceof ConstantStringType) {
202+
return true;
203+
}
204+
205+
return $itemType->isClassString();
206+
}
207+
190208
/**
191209
* @param string $className
192210
* @param ReflectionWithFilename[] $dependenciesReflections

src/Type/Constant/ConstantStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public function getValue(): string
4545
return $this->value;
4646
}
4747

48+
public function isClassString(): bool
49+
{
50+
return $this->isClassString;
51+
}
52+
4853
public function describe(VerbosityLevel $level): string
4954
{
5055
return $level->handle(

0 commit comments

Comments
 (0)