Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ServiceMap.php

class ServiceMap

Hierarchy

  • class \mglaman\PHPStanDrupal\Drupal\ServiceMap

Expanded class hierarchy of ServiceMap

8 files declare their use of ServiceMap
ContainerDynamicReturnTypeExtension.php in vendor/mglaman/phpstan-drupal/src/Type/ContainerDynamicReturnTypeExtension.php
DrupalClassResolverDynamicReturnTypeExtension.php in vendor/mglaman/phpstan-drupal/src/Type/DrupalClassResolverDynamicReturnTypeExtension.php
DrupalClassResolverDynamicStaticReturnTypeExtension.php in vendor/mglaman/phpstan-drupal/src/Type/DrupalClassResolverDynamicStaticReturnTypeExtension.php
DrupalClassResolverReturnType.php in vendor/mglaman/phpstan-drupal/src/Type/DrupalClassResolverReturnType.php
DrupalServiceDynamicReturnTypeExtension.php in vendor/mglaman/phpstan-drupal/src/Type/DrupalServiceDynamicReturnTypeExtension.php

... See full list

File

vendor/mglaman/phpstan-drupal/src/Drupal/ServiceMap.php, line 7

Namespace

mglaman\PHPStanDrupal\Drupal
View source
class ServiceMap {
    
    /** @var DrupalServiceDefinition[] */
    private static $services = [];
    public function getService(string $id) : ?DrupalServiceDefinition {
        return self::$services[$id] ?? null;
    }
    
    /**
     * @return DrupalServiceDefinition[]
     */
    public function getServices() : array {
        return self::$services;
    }
    public function setDrupalServices(array $drupalServices) : void {
        self::$services = [];
        $decorators = [];
        foreach ($drupalServices as $serviceId => $serviceDefinition) {
            if (isset($serviceDefinition['alias'], $drupalServices[$serviceDefinition['alias']])) {
                $serviceDefinition = $drupalServices[$serviceDefinition['alias']];
            }
            if (isset($serviceDefinition['parent'], $drupalServices[$serviceDefinition['parent']])) {
                $serviceDefinition = $this->resolveParentDefinition($serviceDefinition['parent'], $serviceDefinition, $drupalServices);
            }
            if (isset($serviceDefinition['decorates'])) {
                $decorators[$serviceDefinition['decorates']][] = $serviceId;
            }
            // @todo support factories
            if (!isset($serviceDefinition['class'])) {
                if (class_exists($serviceId)) {
                    $serviceDefinition['class'] = $serviceId;
                }
                else {
                    continue;
                }
            }
            self::$services[$serviceId] = new DrupalServiceDefinition((string) $serviceId, $serviceDefinition['class'], $serviceDefinition['public'] ?? true, $serviceDefinition['alias'] ?? null);
            $deprecated = $serviceDefinition['deprecated'] ?? null;
            if ($deprecated) {
                if (is_array($deprecated) && isset($deprecated['message'])) {
                    $deprecated = $deprecated['message'];
                }
                $deprecated = str_replace('%service_id%', $serviceId, $deprecated);
                if (isset($serviceDefinition['alias'])) {
                    $deprecated = str_replace('%alias_id%', $serviceDefinition['alias'], $deprecated);
                }
                self::$services[$serviceId]->setDeprecated(true, $deprecated);
            }
        }
        foreach ($decorators as $decorated_service_id => $services) {
            foreach ($services as $dcorating_service_id) {
                if (!isset(self::$services[$decorated_service_id])) {
                    continue;
                }
                self::$services[$decorated_service_id]->addDecorator(self::$services[$dcorating_service_id]);
            }
        }
    }
    private function resolveParentDefinition(string $parentId, array $serviceDefinition, array $drupalServices) : array {
        $parentDefinition = $drupalServices[$parentId] ?? [];
        if ([] === $parentDefinition) {
            return $serviceDefinition;
        }
        if (isset($parentDefinition['parent'])) {
            if (!isset($drupalServices[$parentDefinition['parent']])) {
                return $serviceDefinition;
            }
            $parentDefinition = $this->resolveParentDefinition($parentDefinition['parent'], $drupalServices[$parentDefinition['parent']], $drupalServices);
        }
        if (isset($parentDefinition['class']) && !isset($serviceDefinition['class'])) {
            $serviceDefinition['class'] = $parentDefinition['class'];
        }
        if (isset($parentDefinition['public']) && !isset($serviceDefinition['public'])) {
            $serviceDefinition['public'] = $parentDefinition['public'];
        }
        return $serviceDefinition;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ServiceMap::$services private static property @var DrupalServiceDefinition[]
ServiceMap::getService public function
ServiceMap::getServices public function
ServiceMap::resolveParentDefinition private function
ServiceMap::setDrupalServices public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal