aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php')
-rw-r--r--srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php136
1 files changed, 136 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php b/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
new file mode 100644
index 0000000..948de42
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
@@ -0,0 +1,136 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Compiler;
+
+use Symfony\Component\DependencyInjection\Argument\ArgumentInterface;
+use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
+use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\DependencyInjection\TypedReference;
+
+/**
+ * Emulates the invalid behavior if the reference is not found within the
+ * container.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ResolveInvalidReferencesPass implements CompilerPassInterface
+{
+ private $container;
+ private $signalingException;
+ private $currentId;
+
+ /**
+ * Process the ContainerBuilder to resolve invalid references.
+ */
+ public function process(ContainerBuilder $container)
+ {
+ $this->container = $container;
+ $this->signalingException = new RuntimeException('Invalid reference.');
+
+ try {
+ foreach ($container->getDefinitions() as $this->currentId => $definition) {
+ $this->processValue($definition);
+ }
+ } finally {
+ $this->container = $this->signalingException = null;
+ }
+ }
+
+ /**
+ * Processes arguments to determine invalid references.
+ *
+ * @return mixed
+ *
+ * @throws RuntimeException When an invalid reference is found
+ */
+ private function processValue($value, int $rootLevel = 0, int $level = 0)
+ {
+ if ($value instanceof ServiceClosureArgument) {
+ $value->setValues($this->processValue($value->getValues(), 1, 1));
+ } elseif ($value instanceof ArgumentInterface) {
+ $value->setValues($this->processValue($value->getValues(), $rootLevel, 1 + $level));
+ } elseif ($value instanceof Definition) {
+ if ($value->isSynthetic() || $value->isAbstract()) {
+ return $value;
+ }
+ $value->setArguments($this->processValue($value->getArguments(), 0));
+ $value->setProperties($this->processValue($value->getProperties(), 1));
+ $value->setMethodCalls($this->processValue($value->getMethodCalls(), 2));
+ } elseif (\is_array($value)) {
+ $i = 0;
+
+ foreach ($value as $k => $v) {
+ try {
+ if (false !== $i && $k !== $i++) {
+ $i = false;
+ }
+ if ($v !== $processedValue = $this->processValue($v, $rootLevel, 1 + $level)) {
+ $value[$k] = $processedValue;
+ }
+ } catch (RuntimeException $e) {
+ if ($rootLevel < $level || ($rootLevel && !$level)) {
+ unset($value[$k]);
+ } elseif ($rootLevel) {
+ throw $e;
+ } else {
+ $value[$k] = null;
+ }
+ }
+ }
+
+ // Ensure numerically indexed arguments have sequential numeric keys.
+ if (false !== $i) {
+ $value = array_values($value);
+ }
+ } elseif ($value instanceof Reference) {
+ if ($this->container->has($id = (string) $value)) {
+ return $value;
+ }
+
+ $currentDefinition = $this->container->getDefinition($this->currentId);
+
+ // resolve decorated service behavior depending on decorator service
+ if ($currentDefinition->innerServiceId === $id && ContainerInterface::NULL_ON_INVALID_REFERENCE === $currentDefinition->decorationOnInvalid) {
+ return null;
+ }
+
+ $invalidBehavior = $value->getInvalidBehavior();
+
+ if (ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $invalidBehavior && $value instanceof TypedReference && !$this->container->has($id)) {
+ $e = new ServiceNotFoundException($id, $this->currentId);
+
+ // since the error message varies by $id and $this->currentId, so should the id of the dummy errored definition
+ $this->container->register($id = sprintf('.errored.%s.%s', $this->currentId, $id), $value->getType())
+ ->addError($e->getMessage());
+
+ return new TypedReference($id, $value->getType(), $value->getInvalidBehavior());
+ }
+
+ // resolve invalid behavior
+ if (ContainerInterface::NULL_ON_INVALID_REFERENCE === $invalidBehavior) {
+ $value = null;
+ } elseif (ContainerInterface::IGNORE_ON_INVALID_REFERENCE === $invalidBehavior) {
+ if (0 < $level || $rootLevel) {
+ throw $this->signalingException;
+ }
+ $value = null;
+ }
+ }
+
+ return $value;
+ }
+}