Skip to content

Commit f15722d

Browse files
committed
minor symfony#32143 use proper return types in ErrorHandler and ArgumentResolver (Tobion)
This PR was merged into the 4.4 branch. Discussion ---------- use proper return types in ErrorHandler and ArgumentResolver | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | tiny | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | BC breaks? | no <!-- see https://symfony.com/bc --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | | License | MIT | Doc PR | Found those things while reviewing symfony#31996 which missed some return types due to using `return` instead of `return null`. It's part of fixing symfony#17201 (due to symfony#10717). See also symfony#30869 that somebody was stumbling over. Commits ------- 2f9121b use proper return types in ErrorHandler and ArgumentResolver
2 parents aaea4b0 + 2f9121b commit f15722d

File tree

6 files changed

+23
-34
lines changed

6 files changed

+23
-34
lines changed

src/Symfony/Component/Debug/ErrorHandler.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -369,18 +369,13 @@ private function reRegister($prev)
369369
/**
370370
* Handles errors by filtering then logging them according to the configured bit fields.
371371
*
372-
* @param int $type One of the E_* constants
373-
* @param string $message
374-
* @param string $file
375-
* @param int $line
376-
*
377372
* @return bool Returns false when no handling happens so that the PHP engine can handle the error itself
378373
*
379374
* @throws \ErrorException When $this->thrownErrors requests so
380375
*
381376
* @internal
382377
*/
383-
public function handleError($type, $message, $file, $line)
378+
public function handleError(int $type, string $message, string $file, int $line): bool
384379
{
385380
// @deprecated to be removed in Symfony 5.0
386381
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)
443438
self::$silencedErrorCache[$id][$message] = $errorAsException;
444439
}
445440
if (null === $lightTrace) {
446-
return;
441+
return true;
447442
}
448443
} else {
449444
$errorAsException = new \ErrorException($logMessage, 0, $type, $file, $line);

src/Symfony/Component/HttpKernel/Controller/ArgumentResolver.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,16 @@ public function getArguments(Request $request, $controller)
5555

5656
$resolved = $resolver->resolve($request, $metadata);
5757

58-
if (!$resolved instanceof \Generator) {
59-
throw new \InvalidArgumentException(sprintf('%s::resolve() must yield at least one value.', \get_class($resolver)));
60-
}
61-
58+
$atLeastOne = false;
6259
foreach ($resolved as $append) {
60+
$atLeastOne = true;
6361
$arguments[] = $append;
6462
}
6563

64+
if (!$atLeastOne) {
65+
throw new \InvalidArgumentException(sprintf('%s::resolve() must yield at least one value.', \get_class($resolver)));
66+
}
67+
6668
// continue to the next controller argument
6769
continue 2;
6870
}

src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/VariadicValueResolver.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ public function resolve(Request $request, ArgumentMetadata $argument)
4141
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)));
4242
}
4343

44-
foreach ($values as $value) {
45-
yield $value;
46-
}
44+
yield from $values;
4745
}
4846
}

src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function supports(Request $request, ArgumentMetadata $argument);
3737
* @param Request $request
3838
* @param ArgumentMetadata $argument
3939
*
40-
* @return \Generator
40+
* @return iterable
4141
*/
4242
public function resolve(Request $request, ArgumentMetadata $argument);
4343
}

src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,30 +42,24 @@ public function createArgumentMetadata($controller)
4242

4343
/**
4444
* Returns an associated type to the given parameter if available.
45-
*
46-
* @param \ReflectionParameter $parameter
47-
*
48-
* @return string|null
4945
*/
50-
private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function)
46+
private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function): ?string
5147
{
5248
if (!$type = $parameter->getType()) {
53-
return;
49+
return null;
5450
}
5551
$name = $type->getName();
56-
$lcName = strtolower($name);
5752

58-
if ('self' !== $lcName && 'parent' !== $lcName) {
59-
return $name;
60-
}
61-
if (!$function instanceof \ReflectionMethod) {
62-
return;
63-
}
64-
if ('self' === $lcName) {
65-
return $function->getDeclaringClass()->name;
66-
}
67-
if ($parent = $function->getDeclaringClass()->getParentClass()) {
68-
return $parent->name;
53+
if ($function instanceof \ReflectionMethod) {
54+
$lcName = strtolower($name);
55+
switch ($lcName) {
56+
case 'self':
57+
return $function->getDeclaringClass()->name;
58+
case 'parent':
59+
return ($parent = $function->getDeclaringClass()->getParentClass()) ? $parent->name : null;
60+
}
6961
}
62+
63+
return $name;
7064
}
7165
}

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public function testGetArgumentWithoutArray()
185185
$resolver = new ArgumentResolver($factory, [$valueResolver]);
186186

187187
$valueResolver->expects($this->any())->method('supports')->willReturn(true);
188-
$valueResolver->expects($this->any())->method('resolve')->willReturn('foo');
188+
$valueResolver->expects($this->any())->method('resolve')->willReturn([]);
189189

190190
$request = Request::create('/');
191191
$request->attributes->set('foo', 'foo');

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy