3636#[AutowiredService]
3737final 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