Task/Collect/ServicesCollector.php
protected function getStaticContainerServices() {
    $container_builder = $this->containerBuilderGetter->getContainerBuilder();

    // We can get service IDs from the container,
    $static_container_reflection = new \ReflectionClass('\Drupal');
    $filename = $static_container_reflection->getFileName();
    $source = file($filename);

    $methods = $static_container_reflection->getMethods();
    $service_definitions = [];
    foreach ($methods as $method) {
      $name = $method->getName();

      // Skip any which have parameters: the service getter methods have no
      // parameters.
      if ($method->getNumberOfParameters() > 0) {
        continue;
      }

      $start_line = $method->getStartLine();
      $end_line = $method->getEndLine();

      // Skip any which have more than 2 lines: the service getter methods have
      // only 1 line of code.
      if ($end_line - $start_line > 2) {
        continue;
      }

      // Get the single code line.
      $code_line = $source[$start_line];

      // Extract the service ID from the call to getContainer().
      $matches = [];
      $code_line_regex = "@return static::getContainer\(\)->get\('([\w.]+)'\);@";
      if (!preg_match($code_line_regex, $code_line, $matches)) {
        continue;
      }
      $service_id = $matches[1];

      $docblock = $method->getDocComment();

      // Extract the interface for the service from the docblock @return.
      $matches = [];
      preg_match("[@return (.+)]", $docblock, $matches);
      $interface = $matches[1];

      // Extract a description from the docblock first line.
      $docblock_lines = explode("\n", $docblock);
      $doc_first_line = $docblock_lines[1];

      $matches = [];
      preg_match("@(the (.*))\.@", $doc_first_line, $matches);
      $description = ucfirst($matches[1]);
      $label = ucfirst($matches[2]);

      $definition = $container_builder->getDefinition($service_id);

      $service_definition = [
        'id' => $service_id,
        'label' => $label,
        'static_method' => $name, // not used.
        'class' => '\\' . $definition->getClass(),
        'interface' => $interface,
        'description' => $description,
      ];
      $service_definitions[$service_id] = $service_definition;
    }

    // Sort by ID.
    ksort($service_definitions);

    return $service_definitions;
  }
protected function getStaticContainerServices() {
    $container_builder = $this->containerBuilderGetter->getContainerBuilder();

    // We can get service IDs from the container,
    $static_container_reflection = new \ReflectionClass('\Drupal');
    $filename = $static_container_reflection->getFileName();
    $source = file($filename);

    $methods = $static_container_reflection->getMethods();
    $service_definitions = [];
    foreach ($methods as $method) {
      $name = $method->getName();

      // Skip any which have parameters: the service getter methods have no
      // parameters.
      if ($method->getNumberOfParameters() > 0) {
        continue;
      }

      $start_line = $method->getStartLine();
      $end_line = $method->getEndLine();

      // Skip any which have more than 2 lines: the service getter methods have
      // only 1 line of code.
      if ($end_line - $start_line > 2) {
        continue;
      }

      // Get the single code line.
      $code_line = $source[$start_line];

      // Extract the service ID from the call to getContainer().
      $matches = [];
      $code_line_regex = "@return static::getContainer\(\)->get\('([\w.]+)'\);@";
      if (!preg_match($code_line_regex, $code_line, $matches)) {
        continue;
      }
      $service_id = $matches[1];

      $docblock = $method->getDocComment();

      // Extract the interface for the service from the docblock @return.
      $matches = [];
      preg_match("[@return (.+)]", $docblock, $matches);
      $interface = $matches[1];

      // Extract a description from the docblock first line.
      $docblock_lines = explode("\n", $docblock);
      $doc_first_line = $docblock_lines[1];

      $matches = [];
      preg_match("@(the (.*))\.@", $doc_first_line, $matches);
      $description = ucfirst($matches[1]);
      $label = ucfirst($matches[2]);

      $definition = $container_builder->getDefinition($service_id);

      $service_definition = [
        'id' => $service_id,
        'label' => $label,
        'static_method' => $name, // not used.
        'class' => '\\' . $definition->getClass(),
        'interface' => $interface,
        'description' => $description,
      ];
      $service_definitions[$service_id] = $service_definition;
    }

    // Sort by ID.
    ksort($service_definitions);

    return $service_definitions;
  }
protected function getStaticContainerServices ( ) { $ container_builder = $ this -> containerBuilderGetter -> getContainerBuilder ( ) ; // We can get service IDs from the container, $ static_container_reflection = new \ ReflectionClass ( '\Drupal' ) ; $ filename = $ static_container_reflection -> getFileName ( ) ; $ source = file ( $ filename ) ; $ methods = $ static_container_reflection -> getMethods ( ) ; $ service_definitions = [ ] ; foreach ( $ methods as $ method ) { $ name = $ method -> getName ( ) ; // Skip any which have parameters: the service getter methods have no // parameters. if ( $ method -> getNumberOfParameters ( ) > 0 ) { continue ; } $ start_line = $ method -> getStartLine ( ) ; $ end_line = $ method -> getEndLine ( ) ; // Skip any which have more than 2 lines: the service getter methods have // only 1 line of code. if ( $ end_line - $ start_line > 2 ) { continue ; } // Get the single code line. $ code_line = $ source [ $ start_line ] ; // Extract the service ID from the call to getContainer(). $ matches = [ ] ; $ code_line_regex = "@return static::getContainer\(\)->get\('([\w.]+)'\);@" ; if ( ! preg_match ( $ code_line_regex , $ code_line , $ matches ) ) { continue ; } $ service_id = $ matches [ 1 ] ; $ docblock = $ method -> getDocComment ( ) ; // Extract the interface for the service from the docblock @return. $ matches = [ ] ; preg_match ( "[@return (.+)]" , $ docblock , $ matches ) ; $ interface = $ matches [ 1 ] ; // Extract a description from the docblock first line. $ docblock_lines = explode ( "\n" , $ docblock ) ; $ doc_first_line = $ docblock_lines [ 1 ] ; $ matches = [ ] ; preg_match ( "@(the (.*))\.@" , $ doc_first_line , $ matches ) ; $ description = ucfirst ( $ matches [ 1 ] ) ; $ label = ucfirst ( $ matches [ 2 ] ) ; $ definition = $ container_builder -> getDefinition ( $ service_id ) ; $ service_definition = [ 'id' => $ service_id , 'label' => $ label , 'static_method' => $ name , // not used. 'class' => '\\' . $ definition -> getClass ( ) , 'interface' => $ interface , 'description' => $ description , ] ; $ service_definitions [ $ service_id ] = $ service_definition ; } // Sort by ID. ksort ( $ service_definitions ) ; return $ service_definitions ; }
Get data on services from the static container.

This examines the \Drupal static helper using reflection, and extracts
data from the helper methods that return services.

@return array
An array of service data.
Get data on services from the static container .