From 2f9121b74dcb9fbce8e1a15b55123341fa887952 Mon Sep 17 00:00:00 2001 From: Tobias Schultze Date: Mon, 24 Jun 2019 01:24:36 +0100 Subject: [PATCH] use proper return types in ErrorHandler and ArgumentResolver --- src/Symfony/Component/Debug/ErrorHandler.php | 9 ++---- .../Controller/ArgumentResolver.php | 10 ++++--- .../VariadicValueResolver.php | 4 +-- .../ArgumentValueResolverInterface.php | 2 +- .../ArgumentMetadataFactory.php | 30 ++++++++----------- .../Tests/Controller/ArgumentResolverTest.php | 2 +- 6 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/Symfony/Component/Debug/ErrorHandler.php b/src/Symfony/Component/Debug/ErrorHandler.php index a99a000b07fa..86d19dbd078d 100644 --- a/src/Symfony/Component/Debug/ErrorHandler.php +++ b/src/Symfony/Component/Debug/ErrorHandler.php @@ -369,18 +369,13 @@ private function reRegister($prev) /** * Handles errors by filtering then logging them according to the configured bit fields. * - * @param int $type One of the E_* constants - * @param string $message - * @param string $file - * @param int $line - * * @return bool Returns false when no handling happens so that the PHP engine can handle the error itself * * @throws \ErrorException When $this->thrownErrors requests so * * @internal */ - public function handleError($type, $message, $file, $line) + public function handleError(int $type, string $message, string $file, int $line): bool { // @deprecated to be removed in Symfony 5.0 if (\PHP_VERSION_ID >= 70300 && $message && '"' === $message[0] && 0 === strpos($message, '"continue') && preg_match('/^"continue(?: \d++)?" targeting switch is equivalent to "break(?: \d++)?"\. Did you mean to use "continue(?: \d++)?"\?$/', $message)) { @@ -443,7 +438,7 @@ public function handleError($type, $message, $file, $line) self::$silencedErrorCache[$id][$message] = $errorAsException; } if (null === $lightTrace) { - return; + return true; } } else { $errorAsException = new \ErrorException($logMessage, 0, $type, $file, $line); diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver.php index 86ceab2f264c..0a5f618de07f 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver.php @@ -55,14 +55,16 @@ public function getArguments(Request $request, $controller) $resolved = $resolver->resolve($request, $metadata); - if (!$resolved instanceof \Generator) { - throw new \InvalidArgumentException(sprintf('%s::resolve() must yield at least one value.', \get_class($resolver))); - } - + $atLeastOne = false; foreach ($resolved as $append) { + $atLeastOne = true; $arguments[] = $append; } + if (!$atLeastOne) { + throw new \InvalidArgumentException(sprintf('%s::resolve() must yield at least one value.', \get_class($resolver))); + } + // continue to the next controller argument continue 2; } diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/VariadicValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/VariadicValueResolver.php index 7ee2d7af5cee..a388bd823d44 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/VariadicValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/VariadicValueResolver.php @@ -41,8 +41,6 @@ public function resolve(Request $request, ArgumentMetadata $argument) throw new \InvalidArgumentException(sprintf('The action argument "...$%1$s" is required to be an array, the request attribute "%1$s" contains a type of "%2$s" instead.', $argument->getName(), \gettype($values))); } - foreach ($values as $value) { - yield $value; - } + yield from $values; } } diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php index fd7b09ecf2ed..21d874364a75 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php @@ -37,7 +37,7 @@ public function supports(Request $request, ArgumentMetadata $argument); * @param Request $request * @param ArgumentMetadata $argument * - * @return \Generator + * @return iterable */ public function resolve(Request $request, ArgumentMetadata $argument); } diff --git a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php index 8ee9b0b9388d..527a6a8a3646 100644 --- a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php +++ b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php @@ -42,30 +42,24 @@ public function createArgumentMetadata($controller) /** * Returns an associated type to the given parameter if available. - * - * @param \ReflectionParameter $parameter - * - * @return string|null */ - private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function) + private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function): ?string { if (!$type = $parameter->getType()) { - return; + return null; } $name = $type->getName(); - $lcName = strtolower($name); - if ('self' !== $lcName && 'parent' !== $lcName) { - return $name; - } - if (!$function instanceof \ReflectionMethod) { - return; - } - if ('self' === $lcName) { - return $function->getDeclaringClass()->name; - } - if ($parent = $function->getDeclaringClass()->getParentClass()) { - return $parent->name; + if ($function instanceof \ReflectionMethod) { + $lcName = strtolower($name); + switch ($lcName) { + case 'self': + return $function->getDeclaringClass()->name; + case 'parent': + return ($parent = $function->getDeclaringClass()->getParentClass()) ? $parent->name : null; + } } + + return $name; } } diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php index 45aa9ef26aad..017ffa0a4165 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php @@ -185,7 +185,7 @@ public function testGetArgumentWithoutArray() $resolver = new ArgumentResolver($factory, [$valueResolver]); $valueResolver->expects($this->any())->method('supports')->willReturn(true); - $valueResolver->expects($this->any())->method('resolve')->willReturn('foo'); + $valueResolver->expects($this->any())->method('resolve')->willReturn([]); $request = Request::create('/'); $request->attributes->set('foo', 'foo');