@@ -39,6 +39,14 @@ public function loadConfiguration(): void
3939 $ builder = $ this ->getContainerBuilder ();
4040
4141 $ autowiredParameters = Attributes::findTargetMethodParameters (AutowiredParameter::class);
42+ $ constructorParameters = [];
43+ foreach ($ autowiredParameters as $ parameter ) {
44+ if (strcasecmp ($ parameter ->method , '__construct ' ) !== 0 ) {
45+ continue ;
46+ }
47+ $ constructorParameters [$ parameter ->class ] ??= [];
48+ $ constructorParameters [$ parameter ->class ][] = $ parameter ;
49+ }
4250
4351 foreach (Attributes::findTargetClasses (AutowiredService::class) as $ class ) {
4452 $ reflection = new ReflectionClass ($ class ->name );
@@ -53,7 +61,7 @@ public function loadConfiguration(): void
5361 $ definition ->setFactory (new Statement ([new Reference (substr ($ ref , 1 )), $ method ]));
5462 }
5563
56- $ this ->processParameters ($ class ->name , $ definition , $ autowiredParameters );
64+ $ this ->processParameters ($ class ->name , $ definition , $ constructorParameters );
5765
5866 foreach (ValidateServiceTagsExtension::INTERFACE_TAG_MAPPING as $ interface => $ tag ) {
5967 if (!$ reflection ->implementsInterface ($ interface )) {
@@ -76,7 +84,7 @@ public function loadConfiguration(): void
7684 $ definition ->setFactory (new Statement ([new Reference (substr ($ ref , 1 )), $ method ]));
7785 }
7886
79- $ this ->processParameters ($ class ->name , $ definition , $ autowiredParameters );
87+ $ this ->processParameters ($ class ->name , $ definition , $ constructorParameters );
8088 }
8189
8290 foreach (Attributes::findTargetClasses (GenerateFactory::class) as $ class ) {
@@ -89,7 +97,7 @@ public function loadConfiguration(): void
8997 }
9098
9199 $ resultDefinition = $ definition ->getResultDefinition ();
92- $ this ->processParameters ($ class ->name , $ resultDefinition , $ autowiredParameters );
100+ $ this ->processParameters ($ class ->name , $ resultDefinition , $ constructorParameters );
93101 }
94102
95103 /** @var stdClass&object{level: int|null} $config */
@@ -109,7 +117,7 @@ public function loadConfiguration(): void
109117 ->setAutowired ($ class ->name )
110118 ->addTag (LazyRegistry::RULE_TAG );
111119
112- $ this ->processParameters ($ class ->name , $ definition , $ autowiredParameters );
120+ $ this ->processParameters ($ class ->name , $ definition , $ constructorParameters );
113121 }
114122
115123 foreach (Attributes::findTargetClasses (RegisteredCollector::class) as $ class ) {
@@ -123,28 +131,18 @@ public function loadConfiguration(): void
123131 ->setAutowired ($ class ->name )
124132 ->addTag (RegistryFactory::COLLECTOR_TAG );
125133
126- $ this ->processParameters ($ class ->name , $ definition , $ autowiredParameters );
134+ $ this ->processParameters ($ class ->name , $ definition , $ constructorParameters );
127135 }
128136 }
129137
130138 /**
131139 * @param class-string $className
132- * @param TargetMethodParameter<AutowiredParameter>[] $autowiredParameters
140+ * @param array<class-string, non-empty-list< TargetMethodParameter<AutowiredParameter>>> $constructorParameters
133141 */
134- private function processParameters (string $ className , ServiceDefinition $ definition , array $ autowiredParameters ): void
142+ private function processParameters (string $ className , ServiceDefinition $ definition , array $ constructorParameters ): void
135143 {
136144 $ builder = $ this ->getContainerBuilder ();
137- foreach ($ autowiredParameters as $ autowiredParameter ) {
138- if ($ autowiredParameter ->method [0 ] !== '_ ' ) {
139- continue ;
140- }
141-
142- if (strcasecmp ($ autowiredParameter ->method , '__construct ' ) !== 0 ) {
143- continue ;
144- }
145- if (strcasecmp ($ autowiredParameter ->class , $ className ) !== 0 ) {
146- continue ;
147- }
145+ foreach ($ constructorParameters [$ className ] ?? [] as $ autowiredParameter ) {
148146 $ ref = $ autowiredParameter ->attribute ->ref ;
149147 if ($ ref === null ) {
150148 $ argument = Helpers::expand (
0 commit comments