Skip to content

Commit c2b8368

Browse files
committed
Refactor AutowiredAttributeServicesExtension
1 parent 16fabaa commit c2b8368

File tree

1 file changed

+35
-23
lines changed

1 file changed

+35
-23
lines changed

src/DependencyInjection/AutowiredAttributeServicesExtension.php

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44

55
use Nette\DI\CompilerExtension;
66
use Nette\DI\Definitions\Reference;
7+
use Nette\DI\Definitions\ServiceDefinition;
78
use Nette\DI\Helpers;
89
use Nette\Utils\Strings;
910
use olvlvl\ComposerAttributeCollector\Attributes;
11+
use olvlvl\ComposerAttributeCollector\TargetMethodParameter;
1012
use ReflectionClass;
1113
use function strtolower;
1214
use function substr;
@@ -30,29 +32,7 @@ public function loadConfiguration(): void
3032
->setType($class->name)
3133
->setAutowired();
3234

33-
foreach ($autowiredParameters as $autowiredParameter) {
34-
if (strtolower($autowiredParameter->method) !== '__construct') {
35-
continue;
36-
}
37-
if (strtolower($autowiredParameter->class) !== strtolower($class->name)) {
38-
continue;
39-
}
40-
$ref = $autowiredParameter->attribute->ref;
41-
if ($ref === null) {
42-
$argument = Helpers::expand(
43-
'%' . Helpers::escape($autowiredParameter->name) . '%',
44-
$builder->parameters,
45-
);
46-
} elseif (Strings::match($ref, '#^@[\w\\\\]+$#D') !== null) {
47-
$argument = new Reference(substr($ref, 1));
48-
} else {
49-
$argument = Helpers::expand(
50-
$ref,
51-
$builder->parameters,
52-
);
53-
}
54-
$definition->setArgument($autowiredParameter->name, $argument);
55-
}
35+
$this->processParameters($class->name, $definition, $autowiredParameters);
5636

5737
foreach (ValidateServiceTagsExtension::INTERFACE_TAG_MAPPING as $interface => $tag) {
5838
if (!$reflection->implementsInterface($interface)) {
@@ -64,4 +44,36 @@ public function loadConfiguration(): void
6444
}
6545
}
6646

47+
/**
48+
* @param class-string $className
49+
* @param TargetMethodParameter<AutowiredParameter>[] $autowiredParameters
50+
*/
51+
private function processParameters(string $className, ServiceDefinition $definition, array $autowiredParameters): void
52+
{
53+
$builder = $this->getContainerBuilder();
54+
foreach ($autowiredParameters as $autowiredParameter) {
55+
if (strtolower($autowiredParameter->method) !== '__construct') {
56+
continue;
57+
}
58+
if (strtolower($autowiredParameter->class) !== strtolower($className)) {
59+
continue;
60+
}
61+
$ref = $autowiredParameter->attribute->ref;
62+
if ($ref === null) {
63+
$argument = Helpers::expand(
64+
'%' . Helpers::escape($autowiredParameter->name) . '%',
65+
$builder->parameters,
66+
);
67+
} elseif (Strings::match($ref, '#^@[\w\\\\]+$#D') !== null) {
68+
$argument = new Reference(substr($ref, 1));
69+
} else {
70+
$argument = Helpers::expand(
71+
$ref,
72+
$builder->parameters,
73+
);
74+
}
75+
$definition->setArgument($autowiredParameter->name, $argument);
76+
}
77+
}
78+
6779
}

0 commit comments

Comments
 (0)