Skip to content

Commit 536d1b8

Browse files
committed
Don't trigger deprecation for deprecated aliases pointing to deprecated definitions
1 parent 7da6d89 commit 536d1b8

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

Compiler/ResolveReferencesToAliasesPass.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ private function getDefinitionId(string $id, ContainerBuilder $container): strin
6262
$alias = $container->getAlias($id);
6363

6464
if ($alias->isDeprecated()) {
65-
@trigger_error(sprintf('%s. It is being referenced by the "%s" %s.', rtrim($alias->getDeprecationMessage($id), '. '), $this->currentId, $container->hasDefinition($this->currentId) ? 'service' : 'alias'), \E_USER_DEPRECATED);
65+
$referencingDefinition = $container->hasDefinition($this->currentId) ? $container->getDefinition($this->currentId) : $container->getAlias($this->currentId);
66+
if (!$referencingDefinition->isDeprecated()) {
67+
@trigger_error(sprintf('%s. It is being referenced by the "%s" %s.', rtrim($alias->getDeprecationMessage($id), '. '), $this->currentId, $container->hasDefinition($this->currentId) ? 'service' : 'alias'), \E_USER_DEPRECATED);
68+
}
6669
}
6770

6871
$seen = [];

Tests/Compiler/ResolveReferencesToAliasesPassTest.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,44 @@ public function testDeprecationNoticeWhenReferencedByDefinition()
123123
$this->process($container);
124124
}
125125

126+
public function testNoDeprecationNoticeWhenReferencedByDeprecatedAlias()
127+
{
128+
$container = new ContainerBuilder();
129+
130+
$container->register('foo', 'stdClass');
131+
132+
$aliasDeprecated = new Alias('foo');
133+
$aliasDeprecated->setDeprecated(true);
134+
$container->setAlias('deprecated_foo_alias', $aliasDeprecated);
135+
136+
$alias = new Alias('deprecated_foo_alias');
137+
$alias->setDeprecated(true);
138+
$container->setAlias('alias', $alias);
139+
140+
$this->process($container);
141+
$this->addToAssertionCount(1);
142+
}
143+
144+
public function testNoDeprecationNoticeWhenReferencedByDeprecatedDefinition()
145+
{
146+
$container = new ContainerBuilder();
147+
148+
$container->register('foo', 'stdClass');
149+
150+
$aliasDeprecated = new Alias('foo');
151+
$aliasDeprecated->setDeprecated(true);
152+
$container->setAlias('foo_aliased', $aliasDeprecated);
153+
154+
$container
155+
->register('definition')
156+
->setDeprecated(true)
157+
->setArguments([new Reference('foo_aliased')])
158+
;
159+
160+
$this->process($container);
161+
$this->addToAssertionCount(1);
162+
}
163+
126164
protected function process(ContainerBuilder $container)
127165
{
128166
$pass = new ResolveReferencesToAliasesPass();

0 commit comments

Comments
 (0)