class ServicePass

Class ServicePass

Hierarchy

  • class \Drupal\webprofiler\Compiler\ServicePass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface

Expanded class hierarchy of ServicePass

1 file declares its use of ServicePass
WebprofilerServiceProvider.php in webprofiler/src/WebprofilerServiceProvider.php

File

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

Namespace

Drupal\webprofiler\Compiler
View source
class ServicePass implements CompilerPassInterface {
    
    /**
     * {@inheritdoc}
     */
    public function process(ContainerBuilder $container) {
        if (FALSE === $container->hasDefinition('webprofiler.services')) {
            return;
        }
        $definition = $container->getDefinition('webprofiler.services');
        $graph = $container->getCompiler()
            ->getServiceReferenceGraph();
        $definition->addMethodCall('setServices', [
            $this->extractData($container, $graph),
        ]);
    }
    
    /**
     * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
     * @param \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph $graph
     *
     * @return array
     */
    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;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ServicePass::extractData private function
ServicePass::process public function