comparison vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
comparison
equal deleted inserted replaced
13:5fb285c0d0e3 14:1fec387a4317
30 $this->repeatedPass = $repeatedPass; 30 $this->repeatedPass = $repeatedPass;
31 } 31 }
32 32
33 /** 33 /**
34 * Processes the ContainerBuilder to remove unused definitions. 34 * Processes the ContainerBuilder to remove unused definitions.
35 *
36 * @param ContainerBuilder $container
37 */ 35 */
38 public function process(ContainerBuilder $container) 36 public function process(ContainerBuilder $container)
39 { 37 {
40 $compiler = $container->getCompiler(); 38 $graph = $container->getCompiler()->getServiceReferenceGraph();
41 $formatter = $compiler->getLoggingFormatter();
42 $graph = $compiler->getServiceReferenceGraph();
43 39
44 $hasChanged = false; 40 $hasChanged = false;
45 foreach ($container->getDefinitions() as $id => $definition) { 41 foreach ($container->getDefinitions() as $id => $definition) {
46 if ($definition->isPublic()) { 42 if ($definition->isPublic() || $definition->isPrivate()) {
47 continue; 43 continue;
48 } 44 }
49 45
50 if ($graph->hasNode($id)) { 46 if ($graph->hasNode($id)) {
51 $edges = $graph->getNode($id)->getInEdges(); 47 $edges = $graph->getNode($id)->getInEdges();
52 $referencingAliases = array(); 48 $referencingAliases = array();
53 $sourceIds = array(); 49 $sourceIds = array();
54 foreach ($edges as $edge) { 50 foreach ($edges as $edge) {
51 if ($edge->isWeak()) {
52 continue;
53 }
55 $node = $edge->getSourceNode(); 54 $node = $edge->getSourceNode();
56 $sourceIds[] = $node->getId(); 55 $sourceIds[] = $node->getId();
57 56
58 if ($node->isAlias()) { 57 if ($node->isAlias()) {
59 $referencingAliases[] = $node->getValue(); 58 $referencingAliases[] = $node->getValue();
65 $isReferenced = false; 64 $isReferenced = false;
66 } 65 }
67 66
68 if (1 === count($referencingAliases) && false === $isReferenced) { 67 if (1 === count($referencingAliases) && false === $isReferenced) {
69 $container->setDefinition((string) reset($referencingAliases), $definition); 68 $container->setDefinition((string) reset($referencingAliases), $definition);
70 $definition->setPublic(true); 69 $definition->setPublic(!$definition->isPrivate());
70 $definition->setPrivate(reset($referencingAliases)->isPrivate());
71 $container->removeDefinition($id); 71 $container->removeDefinition($id);
72 $compiler->addLogMessage($formatter->formatRemoveService($this, $id, 'replaces alias '.reset($referencingAliases))); 72 $container->log($this, sprintf('Removed service "%s"; reason: replaces alias %s.', $id, reset($referencingAliases)));
73 } elseif (0 === count($referencingAliases) && false === $isReferenced) { 73 } elseif (0 === count($referencingAliases) && false === $isReferenced) {
74 $container->removeDefinition($id); 74 $container->removeDefinition($id);
75 $container->resolveEnvPlaceholders(serialize($definition)); 75 $container->resolveEnvPlaceholders(serialize($definition));
76 $compiler->addLogMessage($formatter->formatRemoveService($this, $id, 'unused')); 76 $container->log($this, sprintf('Removed service "%s"; reason: unused.', $id));
77 $hasChanged = true; 77 $hasChanged = true;
78 } 78 }
79 } 79 }
80 80
81 if ($hasChanged) { 81 if ($hasChanged) {