Skip to content

Commit 9a774e2

Browse files
committed
DependencyResolver: Reduce duplicate work
1 parent e3ea780 commit 9a774e2

1 file changed

Lines changed: 17 additions & 11 deletions

File tree

src/Dependency/DependencyResolver.php

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
#[AutowiredService]
3737
final class DependencyResolver
3838
{
39+
/**
40+
* @var array<string, true>
41+
*/
42+
private array $seenClasses = [];
3943

4044
public function __construct(
4145
private FileHelper $fileHelper,
@@ -521,6 +525,11 @@ private function considerArrayForCallableTest(Scope $scope, Array_ $arrayNode):
521525
*/
522526
private function addClassToDependencies(string $className, array &$dependenciesReflections): void
523527
{
528+
if (isset($this->seenClasses[$className])) {
529+
return;
530+
}
531+
$this->seenClasses[$className] = true;
532+
524533
try {
525534
$classReflection = $this->reflectionProvider->getClass($className);
526535
} catch (ClassNotFoundException) {
@@ -676,12 +685,10 @@ private function extractFromParametersAcceptor(
676685
): void
677686
{
678687
foreach ($parametersAcceptor->getParameters() as $parameter) {
679-
$referencedClasses = array_merge(
680-
$parameter->getNativeType()->getReferencedClasses(),
681-
$parameter->getPhpDocType()->getReferencedClasses(),
682-
);
683-
684-
foreach ($referencedClasses as $referencedClass) {
688+
foreach ($parameter->getNativeType()->getReferencedClasses() as $referencedClass) {
689+
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
690+
}
691+
foreach ($parameter->getPhpDocType()->getReferencedClasses() as $referencedClass) {
685692
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
686693
}
687694

@@ -698,11 +705,10 @@ private function extractFromParametersAcceptor(
698705
}
699706
}
700707

701-
$returnTypeReferencedClasses = array_merge(
702-
$parametersAcceptor->getNativeReturnType()->getReferencedClasses(),
703-
$parametersAcceptor->getPhpDocReturnType()->getReferencedClasses(),
704-
);
705-
foreach ($returnTypeReferencedClasses as $referencedClass) {
708+
foreach ($parametersAcceptor->getNativeReturnType()->getReferencedClasses() as $referencedClass) {
709+
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
710+
}
711+
foreach ($parametersAcceptor->getPhpDocReturnType()->getReferencedClasses() as $referencedClass) {
706712
$this->addClassToDependencies($referencedClass, $dependenciesReflections);
707713
}
708714
}

0 commit comments

Comments
 (0)