Skip to content

Commit

Permalink
[ErrorHandler] fix parsing static return type on interface method ann…
Browse files Browse the repository at this point in the history
…otation (fix #35836)
  • Loading branch information
alekitto committed Feb 26, 2020
1 parent 3057c68 commit 432fcae
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 6 deletions.
10 changes: 5 additions & 5 deletions src/Symfony/Component/ErrorHandler/DebugClassLoader.php
Expand Up @@ -428,17 +428,17 @@ public function checkAnnotations(\ReflectionClass $refl, string $class): array
}
}

if ($refl->isInterface() && false !== strpos($doc, 'method') && preg_match_all('#\n \* @method\s+(static\s+)?+(?:[\w\|&\[\]\\\]+\s+)?(\w+(?:\s*\([^\)]*\))?)+(.+?([[:punct:]]\s*)?)?(?=\r?\n \*(?: @|/$|\r?\n))#', $doc, $notice, PREG_SET_ORDER)) {
if ($refl->isInterface() && false !== strpos($doc, 'method') && preg_match_all('#\n \* @method\s+(static\s+)?+([\w\|&\[\]\\\]+\s+)?(\w+(?:\s*\([^\)]*\))?)+(.+?([[:punct:]]\s*)?)?(?=\r?\n \*(?: @|/$|\r?\n))#', $doc, $notice, PREG_SET_ORDER)) {
foreach ($notice as $method) {
$static = '' !== $method[1];
$name = $method[2];
$description = $method[3] ?? null;
$static = '' !== $method[1] && ! empty($method[2]);
$name = $method[3];
$description = $method[4] ?? null;
if (false === strpos($name, '(')) {
$name .= '()';
}
if (null !== $description) {
$description = trim($description);
if (!isset($method[4])) {
if (!isset($method[5])) {
$description .= '.';
}
}
Expand Down
Expand Up @@ -325,6 +325,7 @@ class_exists('Test\\'.ExtendsVirtual::class, true);
restore_error_handler();

$this->assertSame([
'Class "Test\Symfony\Component\ErrorHandler\Tests\ExtendsVirtualParent" should implement method "Symfony\Component\ErrorHandler\Tests\Fixtures\VirtualInterface::staticReturningMethod()".',
'Class "Test\Symfony\Component\ErrorHandler\Tests\ExtendsVirtualParent" should implement method "Symfony\Component\ErrorHandler\Tests\Fixtures\VirtualInterface::sameLineInterfaceMethodNoBraces()".',
'Class "Test\Symfony\Component\ErrorHandler\Tests\ExtendsVirtualParent" should implement method "Symfony\Component\ErrorHandler\Tests\Fixtures\VirtualInterface::newLineInterfaceMethod()": Some description!',
'Class "Test\Symfony\Component\ErrorHandler\Tests\ExtendsVirtualParent" should implement method "Symfony\Component\ErrorHandler\Tests\Fixtures\VirtualInterface::newLineInterfaceMethodNoBraces()": Description.',
Expand Down
Expand Up @@ -4,6 +4,7 @@

/**
* @method string interfaceMethod()
* @method static staticReturningMethod()
* @method sameLineInterfaceMethod($arg)
* @method sameLineInterfaceMethodNoBraces
*
Expand All @@ -25,7 +26,7 @@
*
* Static
* @method static Foo&Bar staticMethod()
* @method static staticMethodNoBraces
* @method static mixed staticMethodNoBraces
* @method static \stdClass staticMethodTyped(int $arg) Description
* @method static \stdClass[] staticMethodTypedNoBraces
*/
Expand Down

0 comments on commit 432fcae

Please sign in to comment.