| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 0.00% | 0 / 1 |  | 50.00% | 3 / 6 | CRAP |  | 66.67% | 16 / 24 | 
| ContainerBuilder |  | 0.00% | 0 / 1 |  | 50.00% | 3 / 6 | 21.26 |  | 66.67% | 16 / 24 | 
| __construct |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 3 / 3 | |||
| set |  | 100.00% | 1 / 1 | 5 |  | 100.00% | 6 / 6 | |||
| register |  | 0.00% | 0 / 1 | 2.15 |  | 66.67% | 2 / 3 | |||
| setParameter |  | 100.00% | 1 / 1 | 2 |  | 100.00% | 4 / 4 | |||
| callMethod |  | 0.00% | 0 / 1 | 12 |  | 0.00% | 0 / 6 | |||
| __sleep |  | 0.00% | 0 / 1 | 1.12 |  | 50.00% | 1 / 2 | |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\DependencyInjection\ContainerBuilder. | |
| */ | |
| namespace Drupal\Core\DependencyInjection; | |
| use Symfony\Component\DependencyInjection\ContainerBuilder as SymfonyContainerBuilder; | |
| use Symfony\Component\DependencyInjection\Container as SymfonyContainer; | |
| use Symfony\Component\DependencyInjection\Reference; | |
| use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | |
| /** | |
| * Drupal's dependency injection container builder. | |
| * | |
| * @todo Submit upstream patches to Symfony to not require these overrides. | |
| * | |
| * @ingroup container | |
| */ | |
| class ContainerBuilder extends SymfonyContainerBuilder { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function __construct(ParameterBagInterface $parameterBag = NULL) { | |
| $this->setResourceTracking(FALSE); | |
| parent::__construct($parameterBag); | |
| } | |
| /** | |
| * Overrides Symfony\Component\DependencyInjection\ContainerBuilder::set(). | |
| * | |
| * Drupal's container builder can be used at runtime after compilation, so we | |
| * override Symfony's ContainerBuilder's restriction on setting services in a | |
| * frozen builder. | |
| * | |
| * @todo Restrict this to synthetic services only. Ideally, the upstream | |
| * ContainerBuilder class should be fixed to allow setting synthetic | |
| * services in a frozen builder. | |
| */ | |
| public function set($id, $service, $scope = self::SCOPE_CONTAINER) { | |
| if (strtolower($id) !== $id) { | |
| throw new \InvalidArgumentException("Service ID names must be lowercase: $id"); | |
| } | |
| SymfonyContainer::set($id, $service, $scope); | |
| // Ensure that the _serviceId property is set on synthetic services as well. | |
| if (isset($this->services[$id]) && is_object($this->services[$id]) && !isset($this->services[$id]->_serviceId)) { | |
| $this->services[$id]->_serviceId = $id; | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function register($id, $class = null) { | |
| if (strtolower($id) !== $id) { | |
| throw new \InvalidArgumentException("Service ID names must be lowercase: $id"); | |
| } | |
| return parent::register($id, $class); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setParameter($name, $value) { | |
| if (strtolower($name) !== $name) { | |
| throw new \InvalidArgumentException("Parameter names must be lowercase: $name"); | |
| } | |
| parent::setParameter($name, $value); | |
| } | |
| /** | |
| * A 1to1 copy of parent::callMethod. | |
| */ | |
| protected function callMethod($service, $call) { | |
| $services = self::getServiceConditionals($call[1]); | |
| foreach ($services as $s) { | |
| if (!$this->has($s)) { | |
| return; | |
| } | |
| } | |
| call_user_func_array(array($service, $call[0]), $this->resolveServices($this->getParameterBag()->resolveValue($call[1]))); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function __sleep() { | |
| assert(FALSE, 'The container was serialized.'); | |
| return array_keys(get_object_vars($this)); | |
| } | |
| } |