Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6a33b9b

Browse filesBrowse files
committed
[DependencyInjection] Use AttributeAutoconfigurationPass for #40406
1 parent f94fb5d commit 6a33b9b
Copy full SHA for 6a33b9b

File tree

Expand file treeCollapse file tree

3 files changed

+74
-1
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+74
-1
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@
4545
use Symfony\Component\Console\Command\Command;
4646
use Symfony\Component\DependencyInjection\Alias;
4747
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
48+
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
49+
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
50+
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
51+
use Symfony\Component\DependencyInjection\Attribute\TaggedLocator;
4852
use Symfony\Component\DependencyInjection\ChildDefinition;
4953
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
5054
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -584,6 +588,12 @@ public function load(array $configs, ContainerBuilder $container)
584588
$container->registerAttributeForAutoconfiguration(AsController::class, static function (ChildDefinition $definition, AsController $attribute): void {
585589
$definition->addTag('controller.service_arguments');
586590
});
591+
$container->registerAttributeForAutoconfiguration(TaggedIterator::class, static function (ChildDefinition $definition, TaggedIterator $attribute, \ReflectionParameter $reflector) {
592+
$definition->setArgument($reflector->getPosition(), new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod));
593+
});
594+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
595+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
596+
});
587597

588598
if (!$container->getParameter('kernel.debug')) {
589599
// remove tagged iterator argument for resource checkers

‎src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ public function process(ContainerBuilder $container)
5252

5353
private function processDefinition(ContainerBuilder $container, string $id, Definition $definition, array $tagsToKeep): Definition
5454
{
55+
foreach ($definition->getArguments() as $key => $argument) {
56+
if ($argument instanceof Definition) {
57+
$definition->setArgument($key, $this->processDefinition($container, $argument->getClass() ?? $id.'.'.$key, $argument, $tagsToKeep));
58+
}
59+
}
60+
5561
$instanceofConditionals = $definition->getInstanceofConditionals();
5662
$autoconfiguredInstanceof = $definition->isAutoconfigured() ? $container->getAutoconfiguredInstanceof() : [];
5763
if (!$instanceofConditionals && !$autoconfiguredInstanceof) {

‎src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
+58-1Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Symfony\Component\DependencyInjection\Alias;
1717
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
1818
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
19+
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
20+
use Symfony\Component\DependencyInjection\Attribute\TaggedLocator;
1921
use Symfony\Component\DependencyInjection\ChildDefinition;
2022
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
2123
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -339,6 +341,10 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethod()
339341
public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredViaAttribute()
340342
{
341343
$container = new ContainerBuilder();
344+
$container->registerAttributeForAutoconfiguration(TaggedIterator::class, static function (ChildDefinition $definition, TaggedIterator $attribute, \ReflectionParameter $reflector) {
345+
$definition->setArgument($reflector->getPosition(), new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod));
346+
});
347+
342348
$container->register(BarTagClass::class)
343349
->setPublic(true)
344350
->addTag('foo_bar', ['foo' => 'bar_tab_class_with_defaultmethod'])
@@ -349,6 +355,7 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredVia
349355
;
350356
$container->register(IteratorConsumer::class)
351357
->setAutowired(true)
358+
->setAutoconfigured(true)
352359
->setPublic(true)
353360
;
354361

@@ -366,6 +373,10 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredVia
366373
public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute()
367374
{
368375
$container = new ContainerBuilder();
376+
$container->registerAttributeForAutoconfiguration(TaggedIterator::class, static function (ChildDefinition $definition, TaggedIterator $attribute, \ReflectionParameter $reflector) {
377+
$definition->setArgument($reflector->getPosition(), new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod));
378+
});
379+
369380
$container->register(BarTagClass::class)
370381
->setPublic(true)
371382
->addTag('foo_bar')
@@ -376,6 +387,7 @@ public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute()
376387
;
377388
$container->register(IteratorConsumerWithDefaultIndexMethod::class)
378389
->setAutowired(true)
390+
->setAutoconfigured(true)
379391
->setPublic(true)
380392
;
381393

@@ -393,6 +405,10 @@ public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute()
393405
public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribute()
394406
{
395407
$container = new ContainerBuilder();
408+
$container->registerAttributeForAutoconfiguration(TaggedIterator::class, static function (ChildDefinition $definition, TaggedIterator $attribute, \ReflectionParameter $reflector) {
409+
$definition->setArgument($reflector->getPosition(), new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod));
410+
});
411+
396412
$container->register(BarTagClass::class)
397413
->setPublic(true)
398414
->addTag('foo_bar')
@@ -403,6 +419,7 @@ public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribut
403419
;
404420
$container->register(IteratorConsumerWithDefaultPriorityMethod::class)
405421
->setAutowired(true)
422+
->setAutoconfigured(true)
406423
->setPublic(true)
407424
;
408425

@@ -420,6 +437,10 @@ public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribut
420437
public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute()
421438
{
422439
$container = new ContainerBuilder();
440+
$container->registerAttributeForAutoconfiguration(TaggedIterator::class, static function (ChildDefinition $definition, TaggedIterator $attribute, \ReflectionParameter $reflector) {
441+
$definition->setArgument($reflector->getPosition(), new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod));
442+
});
443+
423444
$container->register(BarTagClass::class)
424445
->setPublic(true)
425446
->addTag('foo_bar')
@@ -430,6 +451,7 @@ public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMe
430451
;
431452
$container->register(IteratorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class)
432453
->setAutowired(true)
454+
->setAutoconfigured(true)
433455
->setPublic(true)
434456
;
435457

@@ -447,6 +469,10 @@ public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMe
447469
public function testTaggedLocatorConfiguredViaAttribute()
448470
{
449471
$container = new ContainerBuilder();
472+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
473+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
474+
});
475+
450476
$container->register(BarTagClass::class)
451477
->setPublic(true)
452478
->addTag('foo_bar', ['foo' => 'bar_tab_class_with_defaultmethod'])
@@ -457,6 +483,7 @@ public function testTaggedLocatorConfiguredViaAttribute()
457483
;
458484
$container->register(LocatorConsumer::class)
459485
->setAutowired(true)
486+
->setAutoconfigured(true)
460487
->setPublic(true)
461488
;
462489

@@ -476,6 +503,10 @@ public function testTaggedLocatorConfiguredViaAttribute()
476503
public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
477504
{
478505
$container = new ContainerBuilder();
506+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
507+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
508+
});
509+
479510
$container->register(BarTagClass::class)
480511
->setPublic(true)
481512
->addTag('foo_bar')
@@ -486,6 +517,7 @@ public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
486517
;
487518
$container->register(LocatorConsumerWithoutIndex::class)
488519
->setAutowired(true)
520+
->setAutoconfigured(true)
489521
->setPublic(true)
490522
;
491523

@@ -505,6 +537,10 @@ public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
505537
public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute()
506538
{
507539
$container = new ContainerBuilder();
540+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
541+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
542+
});
543+
508544
$container->register(BarTagClass::class)
509545
->setPublic(true)
510546
->addTag('foo_bar')
@@ -515,6 +551,7 @@ public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute()
515551
;
516552
$container->register(LocatorConsumerWithDefaultIndexMethod::class)
517553
->setAutowired(true)
554+
->setAutoconfigured(true)
518555
->setPublic(true)
519556
;
520557

@@ -534,6 +571,10 @@ public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute()
534571
public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute()
535572
{
536573
$container = new ContainerBuilder();
574+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
575+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
576+
});
577+
537578
$container->register(BarTagClass::class)
538579
->setPublic(true)
539580
->addTag('foo_bar')
@@ -544,6 +585,7 @@ public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute
544585
;
545586
$container->register(LocatorConsumerWithDefaultPriorityMethod::class)
546587
->setAutowired(true)
588+
->setAutoconfigured(true)
547589
->setPublic(true)
548590
;
549591

@@ -567,6 +609,10 @@ public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute
567609
public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute()
568610
{
569611
$container = new ContainerBuilder();
612+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
613+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
614+
});
615+
570616
$container->register(BarTagClass::class)
571617
->setPublic(true)
572618
->addTag('foo_bar')
@@ -577,6 +623,7 @@ public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMet
577623
;
578624
$container->register(LocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class)
579625
->setAutowired(true)
626+
->setAutoconfigured(true)
580627
->setPublic(true)
581628
;
582629

@@ -602,6 +649,10 @@ public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMet
602649
public function testNestedDefinitionWithAutoconfiguredConstructorArgument()
603650
{
604651
$container = new ContainerBuilder();
652+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
653+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
654+
});
655+
605656
$container->register(FooTagClass::class)
606657
->setPublic(true)
607658
->addTag('foo_bar', ['foo' => 'foo'])
@@ -610,7 +661,8 @@ public function testNestedDefinitionWithAutoconfiguredConstructorArgument()
610661
->setPublic(true)
611662
->setArguments([
612663
(new Definition(LocatorConsumer::class))
613-
->setAutowired(true),
664+
->setAutowired(true)
665+
->setAutoconfigured(true),
614666
])
615667
;
616668

@@ -629,6 +681,10 @@ public function testNestedDefinitionWithAutoconfiguredConstructorArgument()
629681
public function testFactoryWithAutoconfiguredArgument()
630682
{
631683
$container = new ContainerBuilder();
684+
$container->registerAttributeForAutoconfiguration(TaggedLocator::class, static function (ChildDefinition $definition, TaggedLocator $attribute, \ReflectionParameter $reflector) {
685+
$definition->setArgument($reflector->getPosition(), new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)));
686+
});
687+
632688
$container->register(FooTagClass::class)
633689
->setPublic(true)
634690
->addTag('foo_bar', ['key' => 'my_service'])
@@ -637,6 +693,7 @@ public function testFactoryWithAutoconfiguredArgument()
637693
$container->register(LocatorConsumer::class)
638694
->setPublic(true)
639695
->setAutowired(true)
696+
->setAutoconfigured(true)
640697
->setFactory(new Reference(LocatorConsumerFactory::class))
641698
;
642699

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.