diff vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php @ 16:c2387f117808

Routine composer update
author Chris Cannam
date Tue, 10 Jul 2018 15:07:59 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
line wrap: on
line diff
--- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php	Thu Apr 26 11:26:54 2018 +0100
+++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php	Tue Jul 10 15:07:59 2018 +0100
@@ -58,7 +58,7 @@
         }
 
         foreach ($reflection->getParameters() as $param) {
-            $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param), $this->isVariadic($param), $this->hasDefaultValue($param), $this->getDefaultValue($param), $param->allowsNull());
+            $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $reflection), $this->isVariadic($param), $this->hasDefaultValue($param), $this->getDefaultValue($param), $param->allowsNull());
         }
 
         return $arguments;
@@ -107,23 +107,35 @@
      *
      * @return null|string
      */
-    private function getType(\ReflectionParameter $parameter)
+    private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function)
     {
         if ($this->supportsParameterType) {
             if (!$type = $parameter->getType()) {
                 return;
             }
-            $typeName = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString();
-            if ('array' === $typeName && !$type->isBuiltin()) {
+            $name = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString();
+            if ('array' === $name && !$type->isBuiltin()) {
                 // Special case for HHVM with variadics
                 return;
             }
+        } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $parameter, $name)) {
+            $name = $name[1];
+        } else {
+            return;
+        }
+        $lcName = strtolower($name);
 
-            return $typeName;
+        if ('self' !== $lcName && 'parent' !== $lcName) {
+            return $name;
         }
-
-        if (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $parameter, $info)) {
-            return $info[1];
+        if (!$function instanceof \ReflectionMethod) {
+            return;
+        }
+        if ('self' === $lcName) {
+            return $function->getDeclaringClass()->name;
+        }
+        if ($parent = $function->getDeclaringClass()->getParentClass()) {
+            return $parent->name;
         }
     }
 }