function ServicePass::extractData

Parameters

\Symfony\Component\DependencyInjection\ContainerBuilder $container:

\Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph $graph:

Return value

array

1 call to ServicePass::extractData()
ServicePass::process in webprofiler/src/Compiler/ServicePass.php

File

webprofiler/src/Compiler/ServicePass.php, line 35

Class

ServicePass
Class ServicePass

Namespace

Drupal\webprofiler\Compiler

Code

private function extractData(ContainerBuilder $container, ServiceReferenceGraph $graph) {
    $data = [];
    foreach ($container->getDefinitions() as $id => $definition) {
        $inEdges = [];
        $outEdges = [];
        if ($graph->hasNode($id)) {
            $node = $graph->getNode($id);
            
            /** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
            foreach ($node->getInEdges() as $edge) {
                
                /** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
                $edgeValue = $edge->getValue();
                $inEdges[] = [
                    'id' => $edge->getSourceNode()
                        ->getId(),
                    'invalidBehavior' => $edgeValue ? $edgeValue->getInvalidBehavior() : NULL,
                ];
            }
            
            /** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
            foreach ($node->getOutEdges() as $edge) {
                
                /** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
                $edgeValue = $edge->getValue();
                $outEdges[] = [
                    'id' => $edge->getDestNode()
                        ->getId(),
                    'invalidBehavior' => $edgeValue ? $edgeValue->getInvalidBehavior() : NULL,
                ];
            }
        }
        if ($definition instanceof Definition) {
            $class = $definition->getClass();
            try {
                $reflectedClass = new \ReflectionClass($class);
                $file = $reflectedClass->getFileName();
            } catch (\ReflectionException $e) {
                $file = NULL;
            }
            $tags = $definition->getTags();
            $public = $definition->isPublic();
            $synthetic = $definition->isSynthetic();
        }
        else {
            $id = $definition->__toString();
            $class = NULL;
            $file = NULL;
            $tags = [];
            $public = NULL;
            $synthetic = NULL;
        }
        $data[$id] = [
            'inEdges' => $inEdges,
            'outEdges' => $outEdges,
            'value' => [
                'class' => $class,
                'file' => $file,
                'id' => $id,
                'tags' => $tags,
                'public' => $public,
                'synthetic' => $synthetic,
            ],
        ];
    }
    return $data;
}