3 namespace Drupal\webprofiler\Compiler;
5 use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
6 use Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph;
7 use Symfony\Component\DependencyInjection\ContainerBuilder;
8 use Symfony\Component\DependencyInjection\Definition;
13 class ServicePass implements CompilerPassInterface {
18 public function process(ContainerBuilder $container) {
19 if (FALSE === $container->hasDefinition('webprofiler.services')) {
23 $definition = $container->getDefinition('webprofiler.services');
24 $graph = $container->getCompiler()->getServiceReferenceGraph();
26 $definition->addMethodCall('setServices', [$this->extractData($container, $graph)]);
30 * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
31 * @param \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph $graph
35 private function extractData(ContainerBuilder $container, ServiceReferenceGraph $graph) {
38 foreach ($container->getDefinitions() as $id => $definition) {
42 if ($graph->hasNode($id)) {
43 $node = $graph->getNode($id);
45 /** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
46 foreach ($node->getInEdges() as $edge) {
47 /** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
48 $edgeValue = $edge->getValue();
51 'id' => $edge->getSourceNode()->getId(),
52 'invalidBehavior' => $edgeValue ? $edgeValue->getInvalidBehavior() : NULL,
53 'strict' => $edgeValue ? $edgeValue->isStrict() : NULL,
58 /** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
59 foreach ($node->getOutEdges() as $edge) {
60 /** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
61 $edgeValue = $edge->getValue();
64 'id' => $edge->getDestNode()->getId(),
65 'invalidBehavior' => $edgeValue ? $edgeValue->getInvalidBehavior() : NULL,
66 'strict' => $edgeValue ? $edgeValue->isStrict() : NULL,
71 if ($definition instanceof Definition) {
72 $class = $definition->getClass();
75 $reflectedClass = new \ReflectionClass($class);
76 $file = $reflectedClass->getFileName();
77 } catch (\ReflectionException $e) {
81 $tags = $definition->getTags();
82 $public = $definition->isPublic();
83 $synthetic = $definition->isSynthetic();
86 $id = $definition->__toString();
95 'inEdges' => $inEdges,
96 'outEdges' => $outEdges,
103 'synthetic' => $synthetic,