Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / league / container / src / Argument / ArgumentResolverTrait.php
diff --git a/vendor/league/container/src/Argument/ArgumentResolverTrait.php b/vendor/league/container/src/Argument/ArgumentResolverTrait.php
new file mode 100644 (file)
index 0000000..a371f82
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+namespace League\Container\Argument;
+
+use League\Container\Exception\NotFoundException;
+use League\Container\ReflectionContainer;
+use ReflectionFunctionAbstract;
+use ReflectionParameter;
+
+trait ArgumentResolverTrait
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function resolveArguments(array $arguments)
+    {
+        foreach ($arguments as &$arg) {
+            if ($arg instanceof RawArgumentInterface) {
+                $arg = $arg->getValue();
+                continue;
+            }
+
+            if (! is_string($arg)) {
+                 continue;
+            }
+
+            $container = $this->getContainer();
+
+            if (is_null($container) && $this instanceof ReflectionContainer) {
+                $container = $this;
+            }
+
+            if (! is_null($container) && $container->has($arg)) {
+                $arg = $container->get($arg);
+
+                if ($arg instanceof RawArgumentInterface) {
+                    $arg = $arg->getValue();
+                }
+
+                continue;
+            }
+        }
+
+        return $arguments;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function reflectArguments(ReflectionFunctionAbstract $method, array $args = [])
+    {
+        $arguments = array_map(function (ReflectionParameter $param) use ($method, $args) {
+            $name  = $param->getName();
+            $class = $param->getClass();
+
+            if (array_key_exists($name, $args)) {
+                return $args[$name];
+            }
+
+            if (! is_null($class)) {
+                return $class->getName();
+            }
+
+            if ($param->isDefaultValueAvailable()) {
+                return $param->getDefaultValue();
+            }
+
+            throw new NotFoundException(sprintf(
+                'Unable to resolve a value for parameter (%s) in the function/method (%s)',
+                $name,
+                $method->getName()
+            ));
+        }, $method->getParameters());
+
+        return $this->resolveArguments($arguments);
+    }
+
+    /**
+     * @return \League\Container\ContainerInterface
+     */
+    abstract public function getContainer();
+}