X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fdependency-injection%2FDefinition.php;h=e05b81b50fdd597d9af273302461cf086604f915;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=7781220a97fec3b04542b705d944154490fb81a4;hpb=eba34333e3c89f208d2f72fa91351ad019a71583;p=yaffs-website diff --git a/vendor/symfony/dependency-injection/Definition.php b/vendor/symfony/dependency-injection/Definition.php index 7781220a9..e05b81b50 100644 --- a/vendor/symfony/dependency-injection/Definition.php +++ b/vendor/symfony/dependency-injection/Definition.php @@ -11,6 +11,7 @@ namespace Symfony\Component\DependencyInjection; +use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException; @@ -24,29 +25,30 @@ class Definition private $class; private $file; private $factory; - private $factoryClass; - private $factoryMethod; - private $factoryService; private $shared = true; private $deprecated = false; private $deprecationTemplate; - private $scope = ContainerInterface::SCOPE_CONTAINER; private $properties = array(); private $calls = array(); + private $instanceof = array(); + private $autoconfigured = false; private $configurator; private $tags = array(); private $public = true; + private $private = true; private $synthetic = false; private $abstract = false; - private $synchronized = false; private $lazy = false; private $decoratedService; private $autowired = false; private $autowiringTypes = array(); + private $changes = array(); + private $bindings = array(); + private $errors = array(); - private static $defaultDeprecationTemplate = 'The "%service_id%" service is deprecated. You should stop using it, as it will soon be removed.'; + protected $arguments = array(); - protected $arguments; + private static $defaultDeprecationTemplate = 'The "%service_id%" service is deprecated. You should stop using it, as it will soon be removed.'; /** * @param string|null $class The service class @@ -54,108 +56,85 @@ class Definition */ public function __construct($class = null, array $arguments = array()) { - $this->class = $class; - $this->arguments = $arguments; - } - - /** - * Sets a factory. - * - * @param string|array $factory A PHP function or an array containing a class/Reference and a method to call - * - * @return $this - */ - public function setFactory($factory) - { - if (is_string($factory) && strpos($factory, '::') !== false) { - $factory = explode('::', $factory, 2); + if (null !== $class) { + $this->setClass($class); } - - $this->factory = $factory; - - return $this; + $this->arguments = $arguments; } /** - * Gets the factory. + * Returns all changes tracked for the Definition object. * - * @return string|array The PHP function or an array containing a class/Reference and a method to call + * @return array An array of changes for this Definition */ - public function getFactory() + public function getChanges() { - return $this->factory; + return $this->changes; } /** - * Sets the name of the class that acts as a factory using the factory method, - * which will be invoked statically. + * Sets the tracked changes for the Definition object. * - * @param string $factoryClass The factory class name + * @param array $changes An array of changes for this Definition * * @return $this - * - * @deprecated since version 2.6, to be removed in 3.0. */ - public function setFactoryClass($factoryClass) + public function setChanges(array $changes) { - @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryClass), E_USER_DEPRECATED); - - $this->factoryClass = $factoryClass; + $this->changes = $changes; return $this; } /** - * Gets the factory class. + * Sets a factory. * - * @return string|null The factory class name + * @param string|array $factory A PHP function or an array containing a class/Reference and a method to call * - * @deprecated since version 2.6, to be removed in 3.0. + * @return $this */ - public function getFactoryClass($triggerDeprecationError = true) + public function setFactory($factory) { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED); + $this->changes['factory'] = true; + + if (\is_string($factory) && false !== strpos($factory, '::')) { + $factory = explode('::', $factory, 2); } - return $this->factoryClass; + $this->factory = $factory; + + return $this; } /** - * Sets the factory method able to create an instance of this class. - * - * @param string $factoryMethod The factory method name - * - * @return $this + * Gets the factory. * - * @deprecated since version 2.6, to be removed in 3.0. + * @return string|array|null The PHP function or an array containing a class/Reference and a method to call */ - public function setFactoryMethod($factoryMethod) + public function getFactory() { - @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryMethod), E_USER_DEPRECATED); - - $this->factoryMethod = $factoryMethod; - - return $this; + return $this->factory; } /** * Sets the service that this service is decorating. * - * @param null|string $id The decorated service id, use null to remove decoration - * @param null|string $renamedId The new decorated service id + * @param string|null $id The decorated service id, use null to remove decoration + * @param string|null $renamedId The new decorated service id * @param int $priority The priority of decoration * * @return $this * - * @throws InvalidArgumentException In case the decorated service id and the new decorated service id are equals. + * @throws InvalidArgumentException in case the decorated service id and the new decorated service id are equals */ public function setDecoratedService($id, $renamedId = null, $priority = 0) { - if ($renamedId && $id == $renamedId) { - throw new \InvalidArgumentException(sprintf('The decorated service inner name for "%s" must be different than the service name itself.', $id)); + if ($renamedId && $id === $renamedId) { + throw new InvalidArgumentException(sprintf('The decorated service inner name for "%s" must be different than the service name itself.', $id)); } + $this->changes['decorated_service'] = true; + if (null === $id) { $this->decoratedService = null; } else { @@ -168,65 +147,13 @@ class Definition /** * Gets the service that this service is decorating. * - * @return null|array An array composed of the decorated service id, the new id for it and the priority of decoration, null if no service is decorated + * @return array|null An array composed of the decorated service id, the new id for it and the priority of decoration, null if no service is decorated */ public function getDecoratedService() { return $this->decoratedService; } - /** - * Gets the factory method. - * - * @return string|null The factory method name - * - * @deprecated since version 2.6, to be removed in 3.0. - */ - public function getFactoryMethod($triggerDeprecationError = true) - { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - return $this->factoryMethod; - } - - /** - * Sets the name of the service that acts as a factory using the factory method. - * - * @param string $factoryService The factory service id - * - * @return $this - * - * @deprecated since version 2.6, to be removed in 3.0. - */ - public function setFactoryService($factoryService, $triggerDeprecationError = true) - { - if ($triggerDeprecationError) { - @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryService), E_USER_DEPRECATED); - } - - $this->factoryService = $factoryService; - - return $this; - } - - /** - * Gets the factory service id. - * - * @return string|null The factory service id - * - * @deprecated since version 2.6, to be removed in 3.0. - */ - public function getFactoryService($triggerDeprecationError = true) - { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - return $this->factoryService; - } - /** * Sets the service class. * @@ -236,6 +163,8 @@ class Definition */ public function setClass($class) { + $this->changes['class'] = true; + $this->class = $class; return $this; @@ -254,8 +183,6 @@ class Definition /** * Sets the arguments to pass to the service constructor/factory method. * - * @param array $arguments An array of arguments - * * @return $this */ public function setArguments(array $arguments) @@ -265,6 +192,11 @@ class Definition return $this; } + /** + * Sets the properties to define when creating the service. + * + * @return $this + */ public function setProperties(array $properties) { $this->properties = $properties; @@ -272,11 +204,24 @@ class Definition return $this; } + /** + * Gets the properties to define when creating the service. + * + * @return array + */ public function getProperties() { return $this->properties; } + /** + * Sets a specific property. + * + * @param string $name + * @param mixed $value + * + * @return $this + */ public function setProperty($name, $value) { $this->properties[$name] = $value; @@ -299,10 +244,10 @@ class Definition } /** - * Sets a specific argument. + * Replaces a specific argument. * - * @param int $index - * @param mixed $argument + * @param int|string $index + * @param mixed $argument * * @return $this * @@ -310,12 +255,16 @@ class Definition */ public function replaceArgument($index, $argument) { - if (0 === count($this->arguments)) { + if (0 === \count($this->arguments)) { throw new OutOfBoundsException('Cannot replace arguments if none have been configured yet.'); } - if ($index < 0 || $index > count($this->arguments) - 1) { - throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1)); + if (\is_int($index) && ($index < 0 || $index > \count($this->arguments) - 1)) { + throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, \count($this->arguments) - 1)); + } + + if (!array_key_exists($index, $this->arguments)) { + throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist.', $index)); } $this->arguments[$index] = $argument; @@ -323,6 +272,21 @@ class Definition return $this; } + /** + * Sets a specific argument. + * + * @param int|string $key + * @param mixed $value + * + * @return $this + */ + public function setArgument($key, $value) + { + $this->arguments[$key] = $value; + + return $this; + } + /** * Gets the arguments to pass to the service constructor/factory method. * @@ -336,7 +300,7 @@ class Definition /** * Gets an argument to pass to the service constructor/factory method. * - * @param int $index + * @param int|string $index * * @return mixed The argument value * @@ -344,8 +308,8 @@ class Definition */ public function getArgument($index) { - if ($index < 0 || $index > count($this->arguments) - 1) { - throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1)); + if (!array_key_exists($index, $this->arguments)) { + throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist.', $index)); } return $this->arguments[$index]; @@ -354,8 +318,6 @@ class Definition /** * Sets the methods to call after service initialization. * - * @param array $calls An array of method calls - * * @return $this */ public function setMethodCalls(array $calls = array()) @@ -436,9 +398,55 @@ class Definition } /** - * Sets tags for this definition. + * Sets the definition templates to conditionally apply on the current definition, keyed by parent interface/class. + * + * @param $instanceof ChildDefinition[] + * + * @return $this + */ + public function setInstanceofConditionals(array $instanceof) + { + $this->instanceof = $instanceof; + + return $this; + } + + /** + * Gets the definition templates to conditionally apply on the current definition, keyed by parent interface/class. + * + * @return ChildDefinition[] + */ + public function getInstanceofConditionals() + { + return $this->instanceof; + } + + /** + * Sets whether or not instanceof conditionals should be prepended with a global set. * - * @param array $tags + * @param bool $autoconfigured + * + * @return $this + */ + public function setAutoconfigured($autoconfigured) + { + $this->changes['autoconfigured'] = true; + + $this->autoconfigured = $autoconfigured; + + return $this; + } + + /** + * @return bool + */ + public function isAutoconfigured() + { + return $this->autoconfigured; + } + + /** + * Sets tags for this definition. * * @return $this */ @@ -533,6 +541,8 @@ class Definition */ public function setFile($file) { + $this->changes['file'] = true; + $this->file = $file; return $this; @@ -557,6 +567,8 @@ class Definition */ public function setShared($shared) { + $this->changes['shared'] = true; + $this->shared = (bool) $shared; return $this; @@ -572,46 +584,6 @@ class Definition return $this->shared; } - /** - * Sets the scope of the service. - * - * @param string $scope Whether the service must be shared or not - * - * @return $this - * - * @deprecated since version 2.8, to be removed in 3.0. - */ - public function setScope($scope, $triggerDeprecationError = true) - { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - if (ContainerInterface::SCOPE_PROTOTYPE === $scope) { - $this->setShared(false); - } - - $this->scope = $scope; - - return $this; - } - - /** - * Returns the scope of the service. - * - * @return string - * - * @deprecated since version 2.8, to be removed in 3.0. - */ - public function getScope($triggerDeprecationError = true) - { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - return $this->scope; - } - /** * Sets the visibility of this service. * @@ -621,7 +593,10 @@ class Definition */ public function setPublic($boolean) { + $this->changes['public'] = true; + $this->public = (bool) $boolean; + $this->private = false; return $this; } @@ -637,39 +612,32 @@ class Definition } /** - * Sets the synchronized flag of this service. + * Sets if this service is private. + * + * When set, the "private" state has a higher precedence than "public". + * In version 3.4, a "private" service always remains publicly accessible, + * but triggers a deprecation notice when accessed from the container, + * so that the service can be made really private in 4.0. * * @param bool $boolean * * @return $this - * - * @deprecated since version 2.7, will be removed in 3.0. */ - public function setSynchronized($boolean, $triggerDeprecationError = true) + public function setPrivate($boolean) { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - $this->synchronized = (bool) $boolean; + $this->private = (bool) $boolean; return $this; } /** - * Whether this service is synchronized. + * Whether this service is private. * * @return bool - * - * @deprecated since version 2.7, will be removed in 3.0. */ - public function isSynchronized($triggerDeprecationError = true) + public function isPrivate() { - if ($triggerDeprecationError) { - @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED); - } - - return $this->synchronized; + return $this->private; } /** @@ -681,6 +649,8 @@ class Definition */ public function setLazy($lazy) { + $this->changes['lazy'] = true; + $this->lazy = (bool) $lazy; return $this; @@ -757,7 +727,7 @@ class Definition * * @return $this * - * @throws InvalidArgumentException When the message template is invalid. + * @throws InvalidArgumentException when the message template is invalid */ public function setDeprecated($status = true, $template = null) { @@ -773,6 +743,8 @@ class Definition $this->deprecationTemplate = $template; } + $this->changes['deprecated'] = true; + $this->deprecated = (bool) $status; return $this; @@ -804,13 +776,19 @@ class Definition /** * Sets a configurator to call after the service is fully initialized. * - * @param callable $callable A PHP callable + * @param string|array $configurator A PHP callable * * @return $this */ - public function setConfigurator($callable) + public function setConfigurator($configurator) { - $this->configurator = $callable; + $this->changes['configurator'] = true; + + if (\is_string($configurator) && false !== strpos($configurator, '::')) { + $configurator = explode('::', $configurator, 2); + } + + $this->configurator = $configurator; return $this; } @@ -831,9 +809,13 @@ class Definition * @param string[] $types * * @return $this + * + * @deprecated since version 3.3, to be removed in 4.0. */ public function setAutowiringTypes(array $types) { + @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED); + $this->autowiringTypes = array(); foreach ($types as $type) { @@ -854,7 +836,7 @@ class Definition } /** - * Sets autowired. + * Enables/disables autowiring. * * @param bool $autowired * @@ -862,7 +844,9 @@ class Definition */ public function setAutowired($autowired) { - $this->autowired = $autowired; + $this->changes['autowired'] = true; + + $this->autowired = (bool) $autowired; return $this; } @@ -871,9 +855,15 @@ class Definition * Gets autowiring types that will default to this definition. * * @return string[] + * + * @deprecated since version 3.3, to be removed in 4.0. */ - public function getAutowiringTypes() + public function getAutowiringTypes(/*$triggerDeprecation = true*/) { + if (1 > \func_num_args() || func_get_arg(0)) { + @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED); + } + return array_keys($this->autowiringTypes); } @@ -883,9 +873,13 @@ class Definition * @param string $type * * @return $this + * + * @deprecated since version 3.3, to be removed in 4.0. */ public function addAutowiringType($type) { + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + $this->autowiringTypes[$type] = true; return $this; @@ -897,9 +891,13 @@ class Definition * @param string $type * * @return $this + * + * @deprecated since version 3.3, to be removed in 4.0. */ public function removeAutowiringType($type) { + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + unset($this->autowiringTypes[$type]); return $this; @@ -911,9 +909,67 @@ class Definition * @param string $type * * @return bool + * + * @deprecated since version 3.3, to be removed in 4.0. */ public function hasAutowiringType($type) { + @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED); + return isset($this->autowiringTypes[$type]); } + + /** + * Gets bindings. + * + * @return array + */ + public function getBindings() + { + return $this->bindings; + } + + /** + * Sets bindings. + * + * Bindings map $named or FQCN arguments to values that should be + * injected in the matching parameters (of the constructor, of methods + * called and of controller actions). + * + * @param array $bindings + * + * @return $this + */ + public function setBindings(array $bindings) + { + foreach ($bindings as $key => $binding) { + if (!$binding instanceof BoundArgument) { + $bindings[$key] = new BoundArgument($binding); + } + } + + $this->bindings = $bindings; + + return $this; + } + + /** + * Add an error that occurred when building this Definition. + * + * @param string $error + */ + public function addError($error) + { + $this->errors[] = $error; + } + + /** + * Returns any errors that occurred while building this Definition. + * + * @return array + */ + public function getErrors() + { + return $this->errors; + } }