10000 bug #41170 [DependencyInjection] Don't try to load YamlFileLoader if … · symfony/symfony@1bf384a · GitHub
[go: up one dir, main page]

Skip to content

Commit 1bf384a

Browse files
committed
bug #41170 [DependencyInjection] Don't try to load YamlFileLoader if it's not actually needed (nicolas-grekas)
This PR was merged into the 5.3-dev branch. Discussion ---------- [DependencyInjection] Don't try to load YamlFileLoader if it's not actually needed | Q | A | ------------- | --- | Branch? | 5.x | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #41169 | License | MIT | Doc PR | - This PR enables using DI without Config when autoconfiguration is not used. (When autoconfiguration is used, the dependency on Config is still there.) Commits 10000 ------- 7eb46bd [DI] Don't try to load YamlFileLoader if it's not actually needed
2 parents 649d115 + 7eb46bd commit 1bf384a

File tree

1 file changed

+32
-30
lines changed

1 file changed

+32
-30
lines changed

src/Symfony/Component/DependencyInjection/Compiler/RegisterAutoconfigureAttributesPass.php

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,47 @@
2424
*/
2525
final class RegisterAutoconfigureAttributesPass implements CompilerPassInterface
2626
{
27-
private $registerForAutoconfiguration;
27+
private static $registerForAutoconfiguration;
2828

29-
public function __construct()
29+
/**
30+
* {@inheritdoc}
31+
*/
32+
public function process(ContainerBuilder $container)
3033
{
3134
if (80000 > \PHP_VERSION_ID) {
3235
return;
3336
}
3437

38+
foreach ($container->getDefinitions() as $id => $definition) {
39+
if ($this->accept($definition) && null !== $class = $container->getReflectionClass($definition->getClass())) {
40+
$this->processClass($container, $class);
41+
}
42+
}
43+
}
44+
45+
public function accept(Definition $definition): bool
46+
{
47+
return 80000 <= \PHP_VERSION_ID && $definition->isAutoconfigured() && !$definition->hasTag('container.ignore_attributes');
48+
}
49+
50+
public function processClass(ContainerBuilder $container, \ReflectionClass $class)
51+
{
52+
foreach ($class->getAttributes(Autoconfigure::class, \ReflectionAttribute::IS_INSTANCEOF) as $attribute) {
53+
self::registerForAutoconfiguration($container, $class, $attribute);
54+
}
55+
}
56+
57+
private static function registerForAutoconfiguration(ContainerBuilder $container, \ReflectionClass $class, \ReflectionAttribute $attribute)
58+
{
59+
if (self::$registerForAutoconfiguration) {
60+
return (self::$registerForAutoconfiguration)($container, $class, $attribute);
61+
}
62+
3563
$parseDefinitions = new \ReflectionMethod(YamlFileLoader::class, 'parseDefinitions');
3664
$parseDefinitions->setAccessible(true);
3765
$yamlLoader = $parseDefinitions->getDeclaringClass()->newInstanceWithoutConstructor();
3866

39-
$this->registerForAutoconfiguration = static function (ContainerBuilder $container, \ReflectionClass $class, \ReflectionAttribute $attribute) use ($parseDefinitions, $yamlLoader) {
67+
self::$registerForAutoconfiguration = static function (ContainerBuilder $container, \ReflectionClass $class, \ReflectionAttribute $attribute) use ($parseDefinitions, $yamlLoader) {
4068
$attribute = (array) $attribute->newInstance();
4169

4270
foreach ($attribute['tags'] ?? [] as $i => $tag) {
@@ -57,33 +85,7 @@ public function __construct()
5785
$class->getFileName()
5886
);
5987
};
60-
}
6188

62-
/**
63-
* {@inheritdoc}
64-
*/
65-
public function process(ContainerBuilder $container)
66-
{
67-
if (80000 > \PHP_VERSION_ID) {
68-
return;
69-
}
70-
71-
foreach ($container->getDefinitions() as $id => $definition) {
72-
if ($this->accept($definition) && null !== $class = $container->getReflectionClass($definition->getClass())) {
73-
$this->processClass($container, $class);
74-
}
75-
}
76-
}
77-
78-
public function accept(Definition $definition): bool
79-
{
80-
return 80000 <= \PHP_VERSION_ID && $definition->isAutoconfigured() && !$definition->hasTag('container.ignore_attributes');
81-
}
82-
83-
public function processClass(ContainerBuilder $container, \ReflectionClass $class)
84-
{
85-
foreach ($class->getAttributes(Autoconfigure::class, \ReflectionAttribute::IS_INSTANCEOF) as $attribute) {
86-
($this->registerForAutoconfiguration)($container, $class, $attribute);
87-
}
89+
return (self::$registerForAutoconfiguration)($container, $class, $attribute);
8890
}
8991
}

0 commit comments

Comments
 (0)
0