Skip to content

Commit

Permalink
[DependencyInjection] Autowiring: support parent/decorators
Browse files Browse the repository at this point in the history
  • Loading branch information
dunglas committed Nov 6, 2015
1 parent 8c4e756 commit 71d502a
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 5 deletions.
Expand Up @@ -138,15 +138,15 @@ private function populateAvailableTypes()
*/
private function populateAvailableType($id, Definition $definition)
{
if (!$definition->getClass()) {
return;
}

foreach ($definition->getAutowiringTypes() as $type) {
$this->definedTypes[$type] = true;
$this->types[$type] = $id;
}

if (!$definition->getClass()) {
return;
}

if ($reflectionClass = $this->getReflectionClass($id, $definition)) {
$this->extractInterfaces($id, $reflectionClass);
$this->extractAncestors($id, $reflectionClass);
Expand Down
Expand Up @@ -118,6 +118,7 @@ private function resolveDefinition(ContainerBuilder $container, DefinitionDecora
$def->setArguments($parentDef->getArguments());
$def->setMethodCalls($parentDef->getMethodCalls());
$def->setProperties($parentDef->getProperties());
$def->setAutowiringTypes($parentDef->getAutowiringTypes());
if ($parentDef->getFactoryClass(false)) {
$def->setFactoryClass($parentDef->getFactoryClass(false));
}
Expand Down Expand Up @@ -202,6 +203,11 @@ private function resolveDefinition(ContainerBuilder $container, DefinitionDecora
$def->setMethodCalls(array_merge($def->getMethodCalls(), $calls));
}

// merge autowiring types
foreach ($definition->getAutowiringTypes() as $autowiringType) {
$def->addAutowiringType($autowiringType);
}

// these attributes are always taken from the child
$def->setAbstract($definition->isAbstract());
$def->setScope($definition->getScope(false), false);
Expand Down
Expand Up @@ -189,7 +189,7 @@ public function testOptionalParameter()
$this->assertEquals('foo', $definition->getArgument(2));
}

public function testDontTriggeruAutowiring()
public function testDontTriggerAutowiring()
{
$container = new ContainerBuilder();

Expand Down
Expand Up @@ -274,6 +274,26 @@ public function testDecoratedServiceCanOverwriteDeprecatedParentStatus()
$this->assertFalse($container->getDefinition('decorated_deprecated_parent')->isDeprecated());
}

public function testProcessMergeAutowiringTypes()
{
$container = new ContainerBuilder();

$container
->register('parent')
->addAutowiringType('Foo')
;

$container
->setDefinition('child', new DefinitionDecorator('parent'))
->addAutowiringType('Bar')
;

$this->process($container);

$def = $container->getDefinition('child');
$this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes());
}

protected function process(ContainerBuilder $container)
{
$pass = new ResolveDefinitionTemplatesPass();
Expand Down

0 comments on commit 71d502a

Please sign in to comment.