bug #27367 [FrameworkBundle] cleanup generated test container (nicolas-grekas)

This PR was merged into the 4.1 branch.

Discussion
----------

[FrameworkBundle] cleanup generated test container

| Q             | A
| ------------- | ---
| Branch?       | 4.1
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Cleans up removed and hidden services, fixes an issue when the private container locator is inlined.

Commits
-------

d8cbec00ad [FrameworkBundle] cleanup generated test container
This commit is contained in:
Nicolas Grekas 2018-05-25 16:30:13 +02:00
commit af62eac5c2
3 changed files with 13 additions and 5 deletions

View File

@ -27,13 +27,21 @@ class TestServiceContainerRealRefPass implements CompilerPassInterface
}
$testContainer = $container->getDefinition('test.service_container');
$privateContainer = $container->getDefinition((string) $testContainer->getArgument(2));
$privateContainer = $testContainer->getArgument(2);
if ($privateContainer instanceof Reference) {
$privateContainer = $container->getDefinition((string) $privateContainer);
}
$definitions = $container->getDefinitions();
$privateServices = $privateContainer->getArgument(0);
foreach ($privateContainer->getArgument(0) as $id => $argument) {
foreach ($privateServices as $id => $argument) {
if (isset($definitions[$target = (string) $argument->getValues()[0]])) {
$argument->setValues(array(new Reference($target)));
} else {
unset($privateServices[$id]);
}
}
$privateContainer->replaceArgument(0, $privateServices);
}
}

View File

@ -31,7 +31,7 @@ class TestServiceContainerWeakRefPass implements CompilerPassInterface
$definitions = $container->getDefinitions();
foreach ($definitions as $id => $definition) {
if ((!$definition->isPublic() || $definition->isPrivate()) && !$definition->getErrors() && !$definition->isAbstract()) {
if ($id && '.' !== $id[0] && (!$definition->isPublic() || $definition->isPrivate()) && !$definition->getErrors() && !$definition->isAbstract()) {
$privateServices[$id] = new ServiceClosureArgument(new Reference($id, ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE));
}
}
@ -39,7 +39,7 @@ class TestServiceContainerWeakRefPass implements CompilerPassInterface
$aliases = $container->getAliases();
foreach ($aliases as $id => $alias) {
if (!$alias->isPublic() || $alias->isPrivate()) {
if ($id && '.' !== $id[0] && (!$alias->isPublic() || $alias->isPrivate())) {
while (isset($aliases[$target = (string) $alias])) {
$alias = $aliases[$target];
}

View File

@ -42,6 +42,6 @@ class TestServiceContainerTest extends WebTestCase
$this->assertTrue(static::$container->has(NonPublicService::class));
$this->assertTrue(static::$container->has(PrivateService::class));
$this->assertTrue(static::$container->has('private_service'));
$this->assertTrue(static::$container->has(UnusedPrivateService::class));
$this->assertFalse(static::$container->has(UnusedPrivateService::class));
}
}