8000 feature #21494 [DI] Deprecate autowiring-types in favor of aliases (n… · symfony/dependency-injection@f63acad · GitHub
[go: up one dir, main page]

Skip to content

Commit f63acad

Browse files
committed
feature #21494 [DI] Deprecate autowiring-types in favor of aliases (nicolas-grekas)
This PR was merged into the 3.3-dev branch. Discussion ---------- [DI] Deprecate autowiring-types in favor of aliases | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | yes | Tests pass? | yes | Fixed tickets | #21351, #19970, ~~#18040~~, ~~#17783~~ | License | MIT | Doc PR | symfony/symfony-docs#7445 https://github.com/symfony/symfony/pull/21494/files?w=1 This PR deprecates autowiring-types and replaces them by plain aliases. ping @dunglas @weaverryan Eg instead of ```xml <service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false"> <autowiring-type>Doctrine\Common\Annotations\Reader</autowiring-type> </service> ``` just do: ```xml <service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false" /> <service id="Doctrine\Common\Annotations\Reader" alias="annotations.reader" public="false" /> ``` Commits ------- b11d391cb7 [DI] Deprecate autowiring-types in favor of aliases
2 parents 03ae38c + 254e7e1 commit f63acad

17 files changed

+66
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
3.3.0
55
-----
66

7+
* deprecated autowiring-types, use aliases instead
78
* [EXPERIMENTAL] added support for getter-injection
89
* added support for omitting the factory class name in a service definition if the definition class is set
910
* deprecated case insensitivity of service identifiers

Compiler/AutowirePass.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,13 @@ private function autowireMethod(\ReflectionMethod $reflectionMethod, array $argu
245245
continue;
246246
}
247247

248+
if ($this->container->has($typeName) && !$this->container->findDefinition($typeName)->isAbstract()) {
249+
$arguments[$index] = new Reference($typeName);
250+
$didAutowire = true;
251+
252+
continue;
253+
}
254+
248255
if (null === $this->types) {
249256
$this->populateAvailableTypes();
250257
}
@@ -332,7 +339,7 @@ private function populateAvailableType($id, Definition $definition)
332339
return;
333340
}
334341

335-
foreach ($definition->getAutowiringTypes() as $type) {
342+
foreach ($definition->getAutowiringTypes(false) as $type) {
336343
$this->definedTypes[$type] = true;
337344
$this->types[$type] = $id;
338345
}

Compiler/DecoratorServicePass.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,15 @@ public function process(ContainerBuilder $container)
5353
} else {
5454
$decoratedDefinition = $container->getDefinition($inner);
5555
$definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
56-
$definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes()));
56+
if ($types = array_merge($decoratedDefinition->getAutowiringTypes(false), $definition->getAutowiringTypes(false))) {
57+
$definition->setAutowiringTypes($types);
58+
}
5759
$public = $decoratedDefinition->isPublic();
5860
$decoratedDefinition->setPublic(false);
5961
$decoratedDefinition->setTags(array());
60-
$decoratedDefinition->setAutowiringTypes(array());
62+
if ($decoratedDefinition->getAutowiringTypes(false)) {
63+
$decoratedDefinition->setAutowiringTypes(array());
64+
}
6165
$container->setDefinition($renamedId, $decoratedDefinition);
6266
}
6367

Compiler/PassConfig.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public function __construct()
5353
new ResolveFactoryClassPass(),
5454
new FactoryReturnTypePass($resolveClassPass),
5555
new CheckDefinitionValidityPass(),
56+
new AutowirePass(),
5657
new ResolveReferencesToAliasesPass(),
5758
new ResolveInvalidReferencesPass(),
58-
new AutowirePass(),
5959
new AnalyzeServiceReferencesPass(true),
6060
new CheckCircularReferencesPass(),
6161
new CheckReferenceValidityPass(),

Compiler/ResolveDefinitionTemplatesPass.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ private function doResolveDefinition(ChildDefinition $definition)
9090
$def->setMethodCalls($parentDef->getMethodCalls());
9191
$def->setOverriddenGetters($parentDef->getOverriddenGetters());
9292
$def->setProperties($parentDef->getProperties());
93-
$def->setAutowiringTypes($parentDef->getAutowiringTypes());
93+
if ($parentDef->getAutowiringTypes(false)) {
94+
$def->setAutowiringTypes($parentDef->getAutowiringTypes(false));
95+
}
9496
if ($parentDef->isDeprecated()) {
9597
$def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%'));
9698
}
@@ -167,7 +169,7 @@ private function doResolveDefinition(ChildDefinition $definition)
167169
}
168170

169171
// merge autowiring types
170-
foreach ($definition->getAutowiringTypes() as $autowiringType) {
172+
foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
171173
$def->addAutowiringType($autowiringType);
172174
}
173175

Definition.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -679,9 +679,13 @@ public function getConfigurator()
679679
* @param string[] $types
680680
*
681681
* @return $this
682+
*
683+
* @deprecated since version 3.3, to be removed in 4.0.
682684
*/
683685
public function setAutowiringTypes(array $types)
684686
{
687+
@trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED);
688+
685689
$this->autowiringTypes = array();
686690

687691
foreach ($types as $type) {
@@ -750,9 +754,15 @@ public function setAutowiredMethods(array $autowiredMethods)
750754
* Gets autowiring types that will default to this definition.
751755
*
752756
* @return string[]
757+
*
758+
* @deprecated since version 3.3, to be removed in 4.0.
753759
*/
754-
public function getAutowiringTypes()
760+
public function getAutowiringTypes(/*$triggerDeprecation = true*/)
755761
{
762+
if (1 > func_num_args() || func_get_arg(0)) {
763+
@trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED);
764+
}
765+
756766
return array_keys($this->autowiringTypes);
757767
}
758768

@@ -762,9 +772,13 @@ public function getAutowiringTypes()
762772
* @param string $type
763773
*
764774
* @return $this
775+
*
776+
* @deprecated since version 3.3, to be removed in 4.0.
765777
*/
766778
public function addAutowiringType($type)
767779
{
780+
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
781+
768782
$this->autowiringTypes[$type] = true;
769783

770784
return $this;
@@ -776,9 +790,13 @@ public function addAutowiringType($type)
776790
* @param string $type
777791
*
778792
* @return $this
793+
*
794+
* @deprecated since version 3.3, to be removed in 4.0.
779795
*/
780796
public function removeAutowiringType($type)
781797
{
798+
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
799+
782800
unset($this->autowiringTypes[$type]);
783801

784802
return $this;
@@ -790,9 +808,13 @@ public function removeAutowiringType($type)
790808
* @param string $type
791809
*
792810
* @return bool
811+
*
812+
* @deprecated since version 3.3, to be removed in 4.0.
793813
*/
794814
public function hasAutowiringType($type)
795815
{
816+
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
817+
796818
return isset($this->autowiringTypes[$type]);
797819
}
798820
}

Dumper/XmlDumper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private function addService($definition, $id, \DOMElement $parent)
201201
$service->setAttribute('autowire', 'true');
202202
}
203203

204-
foreach ($definition->getAutowiringTypes() as $autowiringTypeValue) {
204+
foreach ($definition->getAutowiringTypes(false) as $autowiringTypeValue) {
205205
$autowiringType = $this->document->createElement('autowiring-type');
206206
$autowiringType->appendChild($this->document->createTextNode($autowiringTypeValue));
207207

Dumper/YamlDumper.php

Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private function addService($id, $definition)
107107
}
108108

109109
$autowiringTypesCode = '';
110-
foreach ($definition->getAutowiringTypes() as $autowiringType) {
110+
foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
111111
$autowiringTypesCode .= sprintf(" - %s\n", $this->dumper->dump($autowiringType));
112112
}
113113
if ($autowiringTypesCode) {

Tests/Compiler/AutowirePassTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,31 +191,32 @@ public function testTypeNotGuessableWithTypeSet()
191191
$container = new ContainerBuilder();
192192

193193
$container->register('a1', __NAMESPACE__.'\Foo');
194-
$container->register('a2', __NAMESPACE__.'\Foo')->addAutowiringType(__NAMESPACE__.'\Foo');
194+
$container->register(Foo::class, Foo::class);
195195
$aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgument');
196196
$aDefinition->setAutowired(true);
197197

198198
$pass = new AutowirePass();
199199
$pass->process($container);
200200

201201
$this->assertCount(1, $container->getDefinition('a')->getArguments());
202-
$this->assertEquals('a2', (string) $container->getDefinition('a')->getArgument(0));
202+
$this->assertEquals(Foo::class, (string) $container->getDefinition('a')->getArgument(0));
203203
}
204204

205205
public function testWithTypeSet()
206206
{
207207
$container = new ContainerBuilder();
208208

209209
$container->register('c1', __NAMESPACE__.'\CollisionA');
210-
$container->register('c2', __NAMESPACE__.'\CollisionB')->addAutowiringType(__NAMESPACE__.'\CollisionInterface');
210+
$container->register('c2', __NAMESPACE__.'\CollisionB');
211+
$container->setAlias(CollisionInterface::class, 'c2');
211212
$aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired');
212213
$aDefinition->setAutowired(true);
213214

214215
$pass = new AutowirePass();
215216
$pass->process($container);
216217

217218
$this->assertCount(1, $container->getDefinition('a')->getArguments());
218-
$this->assertEquals('c2', (string) $container->getDefinition('a')->getArgument(0));
219+
$this->assertEquals(CollisionInterface::class, (string) $container->getDefinition('a')->getArgument(0));
219220
}
220221

221222
public function testCreateDefinition()

Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinitio
143143
$this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags());
144144
}
145145

146+
/**
147+
* @group legacy
148+
*/
146149
public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition()
147150
{
148151
$container = new ContainerBuilder();

Tests/Compiler/ResolveDefinitionTemplatesPassTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,9 @@ public function testDecoratedServiceCanOverwriteDeprecatedParentStatus()
322322
$this->assertFalse($container->getDefinition('decorated_deprecated_parent')->isDeprecated());
323323
}
324324

325+
/**
326+
* @group legacy
327+
*/
325328
public function testProcessMergeAutowiringTypes()
326329
{
327330
$container = new ContainerBuilder();

Tests/DefinitionTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,9 @@ public function testAutowired()
313313
$this->assertTrue($def->isAutowired());
314314
}
315315

316+
/**
317+
* @group legacy
318+
*/
316319
public function testTypes()
317320
{
318321
$def = new Definition('stdClass');

Tests/Fixtures/containers/container24.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
$container
88
->register('foo', 'Foo')
99
->setAutowired(true)
10-
->addAutowiringType('A')
11-
->addAutowiringType('B')
1210
;
1311

1412
return $container;

Tests/Fixtures/xml/services24.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"< 10000 /span>?>
22
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
33
<services>
4-
<service id="foo" class="Foo" autowire="true">
5-
<autowiring-type>A</autowiring-type>
6-
<autowiring-type>B</autowiring-type>
7-
</service>
4+
<service id="foo" class="Foo" autowire="true"/>
85
</services>
96
</container>

Tests/Fixtures/yaml/services24.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,3 @@ services:
33
foo:
44
class: Foo
55
autowire: true
6-
autowiring_types:
7-
- A
8-
- B

Tests/Loader/XmlFileLoaderTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,9 @@ public function testLoadInlinedServices()
554554
$this->assertSame('configureBar', $barConfigurator[1]);
555555
}
556556

557+
/**
558+
* @group legacy
559+
*/
557560
public function testType()
558561
{
559562
$container = new ContainerBuilder();

Tests/Loader/YamlFileLoaderTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,9 @@ public function testTypeNotString()
325325
$loader->load('bad_types2.yml');
326326
}
327327

328+
/**
329+
* @group legacy
330+
*/
328331
public function testTypes()
329332
{
330333
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)
0