Skip to content

Commit 7bb938d

Browse files
committed
reduce duplicate work in parameter processing
1 parent 86bef61 commit 7bb938d

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

src/DependencyInjection/AutowiredAttributeServicesExtension.php

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)