Skip to content

Commit 3d1c085

Browse files
committed
[DI] Fix missing use + minor tweaks
1 parent 7caa728 commit 3d1c085

File tree

9 files changed

+39
-33
lines changed

9 files changed

+39
-33
lines changed

Loader/Configurator/AbstractConfigurator.php

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ abstract class AbstractConfigurator
2222
{
2323
const FACTORY = 'unknown';
2424

25+
/** @internal */
26+
protected $definition;
27+
2528
public function __call($method, $args)
2629
{
2730
if (method_exists($this, 'set'.$method)) {
@@ -37,7 +40,7 @@ public function __call($method, $args)
3740
* @param mixed $value
3841
* @param bool $allowServices whether Definition and Reference are allowed; by default, only scalars and arrays are
3942
*
40-
* @return mixed the value, optionaly cast to a Definition/Reference
43+
* @return mixed the value, optionally cast to a Definition/Reference
4144
*/
4245
public static function processValue($value, $allowServices = false)
4346
{
@@ -50,32 +53,14 @@ public static function processValue($value, $allowServices = false)
5053
}
5154

5255
if ($value instanceof ReferenceConfigurator) {
53-
static $refCast;
54-
55-
if (!$refCast) {
56-
$refCast = \Closure::bind(function ($value) {
57-
return new Reference($value->id, $value->invalidBehavior);
58-
}, null, $value);
59-
}
60-
61-
// cast ReferenceConfigurator to Reference
62-
return $refCast($value);
56+
return new Reference($value->id, $value->invalidBehavior);
6357
}
6458

6559
if ($value instanceof InlineServiceConfigurator) {
66-
static $defCast;
67-
68-
if (!$defCast) {
69-
$defCast = \Closure::bind(function ($value) {
70-
$def = $value->definition;
71-
$value->definition = null;
72-
73-
return $def;
74-
}, null, $value);
75-
}
60+
$def = $value->definition;
61+
$value->definition = null;
7662

77-
// cast InlineServiceConfigurator to Definition
78-
return $defCast($value);
63+
return $def;
7964
}
8065

8166
if ($value instanceof self) {

Loader/Configurator/AbstractServiceConfigurator.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
abstract class AbstractServiceConfigurator extends AbstractConfigurator
1818
{
1919
protected $parent;
20-
protected $definition;
2120
protected $id;
22-
protected $defaultTags = array();
21+
private $defaultTags = array();
2322

2423
public function __construct(ServicesConfigurator $parent, Definition $definition, $id = null, array $defaultTags = array())
2524
{
@@ -59,7 +58,7 @@ final public function set($id, $class = null)
5958
* Creates an alias.
6059
*
6160
* @param string $id
62-
* @param string $ref
61+
* @param string $referencedId
6362
*
6463
* @return AliasConfigurator
6564
*/

Loader/Configurator/ReferenceConfigurator.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
/**
1717
* @author Nicolas Grekas <[email protected]>
1818
*/
19-
class ReferenceConfigurator
19+
class ReferenceConfigurator extends AbstractConfigurator
2020
{
21-
private $id;
22-
private $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE;
21+
/** @internal */
22+
protected $id;
23+
24+
/** @internal */
25+
protected $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE;
2326

2427
public function __construct($id)
2528
{

Loader/Configurator/Traits/AbstractTrait.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits;
1313

14-
use Symfony\Component\DependencyInjection\Definition;
15-
1614
/**
1715
* @method $this abstract(bool $abstract = true)
1816
*/

Loader/Configurator/Traits/AutoconfigureTrait.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits;
1313

14+
use Symfony\Component\DependencyInjection\ChildDefinition;
1415
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
1516

1617
trait AutoconfigureTrait

Loader/Configurator/Traits/DeprecateTrait.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits;
1313

14-
use Symfony\Component\DependencyInjection\Definition;
1514
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
1615

1716
trait DeprecateTrait

Loader/Configurator/Traits/TagTrait.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits;
1313

14-
use Symfony\Component\DependencyInjection\Definition;
1514
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
1615

1716
trait TagTrait
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
4+
5+
return function (ContainerConfigurator $c) {
6+
$c->services()
7+
->set('parent_service', \stdClass::class)
8+
->set('child_service')->parent('parent_service')->autoconfigure(true);
9+
};

Tests/Loader/PhpFileLoaderTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,17 @@ public function provideConfig()
7676
yield array('php7');
7777
}
7878
}
79+
80+
/**
81+
* @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
82+
* @expectedExceptionMessage The service "child_service" cannot have a "parent" and also have "autoconfigure". Try disabling autoconfiguration for the service.
83+
*/
84+
public function testAutoConfigureAndChildDefinitionNotAllowed()
85+
{
86+
$fixtures = realpath(__DIR__.'/../Fixtures');
87+
$container = new ContainerBuilder();
88+
$loader = new PhpFileLoader($container, new FileLocator());
89+
$loader->load($fixtures.'/config/services_autoconfigure_with_parent.php');
90+
$container->compile();
91+
}
7992
}

0 commit comments

Comments
 (0)