44
55use Nette \DI \CompilerExtension ;
66use Nette \DI \Definitions \Reference ;
7+ use Nette \DI \Definitions \ServiceDefinition ;
78use Nette \DI \Helpers ;
89use Nette \Utils \Strings ;
910use olvlvl \ComposerAttributeCollector \Attributes ;
11+ use olvlvl \ComposerAttributeCollector \TargetMethodParameter ;
1012use ReflectionClass ;
1113use function strtolower ;
1214use 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