Merge branch '4.4' into 5.2

* 4.4:
  Switched to non-null defaults in exception constructors
  [Routing] fix conflict with param named class in attribute
  [Cache] fix setting items' metadata on commit()
This commit is contained in:
Nicolas Grekas 2021-02-22 16:48:39 +01:00
commit 3619ae8ea4
67 changed files with 336 additions and 121 deletions

View File

@ -61,7 +61,7 @@ class DelegatingLoader extends BaseDelegatingLoader
// - this handles the case and prevents the second fatal error // - this handles the case and prevents the second fatal error
// by triggering an exception beforehand. // by triggering an exception beforehand.
throw new LoaderLoadException($resource, null, null, null, $type); throw new LoaderLoadException($resource, null, 0, null, $type);
} }
$this->loading = true; $this->loading = true;

View File

@ -110,6 +110,7 @@ abstract class AbstractTagAwareAdapter implements TagAwareAdapterInterface, TagA
} }
$byLifetime[$ttl][$getId($key)] = $value; $byLifetime[$ttl][$getId($key)] = $value;
$item->metadata = $item->newMetadata;
} }
return $byLifetime; return $byLifetime;

View File

@ -83,6 +83,7 @@ class TagAwareAdapter implements TagAwareAdapterInterface, TagAwareCacheInterfac
$tagsByKey = []; $tagsByKey = [];
foreach ($deferred as $key => $item) { foreach ($deferred as $key => $item) {
$tagsByKey[$key] = $item->newMetadata[CacheItem::METADATA_TAGS] ?? []; $tagsByKey[$key] = $item->newMetadata[CacheItem::METADATA_TAGS] ?? [];
$item->metadata = $item->newMetadata;
} }
return $tagsByKey; return $tagsByKey;

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\FilesystemTagAwareAdapter; use Symfony\Component\Cache\Adapter\FilesystemTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
/** /**
* @group time-sensitive * @group time-sensitive

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\PdoAdapter; use Symfony\Component\Cache\Adapter\PdoAdapter;
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
/** /**
* @group time-sensitive * @group time-sensitive

View File

@ -17,7 +17,6 @@ use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\PdoAdapter; use Symfony\Component\Cache\Adapter\PdoAdapter;
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
/** /**
* @group time-sensitive * @group time-sensitive

View File

@ -9,7 +9,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Symfony\Component\Cache\Tests\Traits; namespace Symfony\Component\Cache\Tests\Adapter;
trait PdoPruneableTrait trait PdoPruneableTrait
{ {

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
/** /**
* @group integration * @group integration

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
/** /**
* @group integration * @group integration

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
use Symfony\Component\Cache\Traits\RedisProxy; use Symfony\Component\Cache\Traits\RedisProxy;
/** /**

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
/** /**
* @group integration * @group integration

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Cache\Tests\Adapter;
use Psr\Cache\CacheItemPoolInterface; use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
use Symfony\Component\Cache\Traits\RedisClusterProxy; use Symfony\Component\Cache\Traits\RedisClusterProxy;
/** /**

View File

@ -19,7 +19,6 @@ use Symfony\Component\Cache\Adapter\ArrayAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Adapter\TagAwareAdapter; use Symfony\Component\Cache\Adapter\TagAwareAdapter;
use Symfony\Component\Cache\Tests\Fixtures\PrunableAdapter; use Symfony\Component\Cache\Tests\Fixtures\PrunableAdapter;
use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait;
use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Filesystem\Filesystem;
/** /**

View File

@ -9,7 +9,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Symfony\Component\Cache\Tests\Traits; namespace Symfony\Component\Cache\Tests\Adapter;
use Symfony\Component\Cache\CacheItem; use Symfony\Component\Cache\CacheItem;
@ -136,7 +136,9 @@ trait TagAwareTestTrait
$pool = $this->createCachePool(); $pool = $this->createCachePool();
$i = $pool->getItem('k'); $i = $pool->getItem('k');
$this->assertSame([], $i->getMetadata());
$pool->save($i->tag('foo')); $pool->save($i->tag('foo'));
$this->assertSame(['foo' => 'foo'], $i->getMetadata()[CacheItem::METADATA_TAGS]);
$i = $pool->getItem('k'); $i = $pool->getItem('k');
$this->assertSame(['foo' => 'foo'], $i->getMetadata()[CacheItem::METADATA_TAGS]); $this->assertSame(['foo' => 'foo'], $i->getMetadata()[CacheItem::METADATA_TAGS]);

View File

@ -18,7 +18,7 @@ namespace Symfony\Component\Config\Exception;
*/ */
class FileLoaderImportCircularReferenceException extends LoaderLoadException class FileLoaderImportCircularReferenceException extends LoaderLoadException
{ {
public function __construct(array $resources, int $code = null, \Throwable $previous = null) public function __construct(array $resources, ?int $code = 0, \Throwable $previous = null)
{ {
$message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]);

View File

@ -34,7 +34,7 @@ class DelegatingLoader extends Loader
public function load($resource, string $type = null) public function load($resource, string $type = null)
{ {
if (false === $loader = $this->resolver->resolve($resource, $type)) { if (false === $loader = $this->resolver->resolve($resource, $type)) {
throw new LoaderLoadException($resource, null, null, null, $type); throw new LoaderLoadException($resource, null, 0, null, $type);
} }
return $loader->load($resource, $type); return $loader->load($resource, $type);

View File

@ -170,7 +170,7 @@ abstract class FileLoader extends Loader
throw $e; throw $e;
} }
throw new LoaderLoadException($resource, $sourceResource, null, $e, $type); throw new LoaderLoadException($resource, $sourceResource, 0, $e, $type);
} }
} }

View File

@ -70,7 +70,7 @@ abstract class Loader implements LoaderInterface
$loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type); $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type);
if (false === $loader) { if (false === $loader) {
throw new LoaderLoadException($resource, null, null, null, $type); throw new LoaderLoadException($resource, null, 0, null, $type);
} }
return $loader; return $loader;

View File

@ -24,13 +24,13 @@ class LoaderLoadExceptionTest extends TestCase
public function testMessageCannotLoadResourceWithType() public function testMessageCannotLoadResourceWithType()
{ {
$exception = new LoaderLoadException('resource', null, null, null, 'foobar'); $exception = new LoaderLoadException('resource', null, 0, null, 'foobar');
$this->assertEquals('Cannot load resource "resource". Make sure there is a loader supporting the "foobar" type.', $exception->getMessage()); $this->assertEquals('Cannot load resource "resource". Make sure there is a loader supporting the "foobar" type.', $exception->getMessage());
} }
public function testMessageCannotLoadResourceWithAnnotationType() public function testMessageCannotLoadResourceWithAnnotationType()
{ {
$exception = new LoaderLoadException('resource', null, null, null, 'annotation'); $exception = new LoaderLoadException('resource', null, 0, null, 'annotation');
$this->assertEquals('Cannot load resource "resource". Make sure annotations are installed and enabled.', $exception->getMessage()); $this->assertEquals('Cannot load resource "resource". Make sure annotations are installed and enabled.', $exception->getMessage());
} }
@ -56,7 +56,7 @@ class LoaderLoadExceptionTest extends TestCase
$exception = new LoaderLoadException( $exception = new LoaderLoadException(
'resource', 'resource',
null, null,
null, 0,
new \Exception('There was a previous error with an ending dot.') new \Exception('There was a previous error with an ending dot.')
); );
$this->assertEquals( $this->assertEquals(
@ -70,7 +70,7 @@ class LoaderLoadExceptionTest extends TestCase
$exception = new LoaderLoadException( $exception = new LoaderLoadException(
'resource', 'resource',
null, null,
null, 0,
new \Exception('There was a previous error with no ending dot') new \Exception('There was a previous error with no ending dot')
); );
$this->assertEquals( $this->assertEquals(
@ -84,7 +84,7 @@ class LoaderLoadExceptionTest extends TestCase
$exception = new LoaderLoadException( $exception = new LoaderLoadException(
'@resource', '@resource',
null, null,
null, 0,
new \Exception('There was a previous error with an ending dot.') new \Exception('There was a previous error with an ending dot.')
); );
$this->assertEquals( $this->assertEquals(

View File

@ -21,10 +21,10 @@ class CommandNotFoundException extends \InvalidArgumentException implements Exce
private $alternatives; private $alternatives;
/** /**
* @param string $message Exception message to throw * @param string $message Exception message to throw
* @param array $alternatives List of similar defined names * @param string[] $alternatives List of similar defined names
* @param int $code Exception code * @param int $code Exception code
* @param \Throwable $previous Previous exception used for the exception chaining * @param \Throwable|null $previous Previous exception used for the exception chaining
*/ */
public function __construct(string $message, array $alternatives = [], int $code = 0, \Throwable $previous = null) public function __construct(string $message, array $alternatives = [], int $code = 0, \Throwable $previous = null)
{ {
@ -34,7 +34,7 @@ class CommandNotFoundException extends \InvalidArgumentException implements Exce
} }
/** /**
* @return array A list of similar defined names * @return string[] A list of similar defined names
*/ */
public function getAlternatives() public function getAlternatives()
{ {

View File

@ -18,11 +18,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class AccessDeniedHttpException extends HttpException class AccessDeniedHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(403, $message, $previous, $headers, $code); parent::__construct(403, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class BadRequestHttpException extends HttpException class BadRequestHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(400, $message, $previous, $headers, $code); parent::__construct(400, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class ConflictHttpException extends HttpException class ConflictHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(409, $message, $previous, $headers, $code); parent::__construct(409, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class GoneHttpException extends HttpException class GoneHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(410, $message, $previous, $headers, $code); parent::__construct(410, $message, $previous, $headers, $code);
} }

View File

@ -21,7 +21,7 @@ class HttpException extends \RuntimeException implements HttpExceptionInterface
private $statusCode; private $statusCode;
private $headers; private $headers;
public function __construct(int $statusCode, string $message = null, \Throwable $previous = null, array $headers = [], ?int $code = 0) public function __construct(int $statusCode, ?string $message = '', \Throwable $previous = null, array $headers = [], ?int $code = 0)
{ {
$this->statusCode = $statusCode; $this->statusCode = $statusCode;
$this->headers = $headers; $this->headers = $headers;

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class LengthRequiredHttpException extends HttpException class LengthRequiredHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(411, $message, $previous, $headers, $code); parent::__construct(411, $message, $previous, $headers, $code);
} }

View File

@ -17,12 +17,12 @@ namespace Symfony\Component\HttpKernel\Exception;
class MethodNotAllowedHttpException extends HttpException class MethodNotAllowedHttpException extends HttpException
{ {
/** /**
* @param array $allow An array of allowed methods * @param string[] $allow An array of allowed methods
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int|null $code The internal exception code
*/ */
public function __construct(array $allow, string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) public function __construct(array $allow, ?string $message = '', \Throwable $previous = null, ?int $code = 0, array $headers = [])
{ {
$headers['Allow'] = strtoupper(implode(', ', $allow)); $headers['Allow'] = strtoupper(implode(', ', $allow));

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class NotAcceptableHttpException extends HttpException class NotAcceptableHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(406, $message, $previous, $headers, $code); parent::__construct(406, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class NotFoundHttpException extends HttpException class NotFoundHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(404, $message, $previous, $headers, $code); parent::__construct(404, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class PreconditionFailedHttpException extends HttpException class PreconditionFailedHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(412, $message, $previous, $headers, $code); parent::__construct(412, $message, $previous, $headers, $code);
} }

View File

@ -19,11 +19,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class PreconditionRequiredHttpException extends HttpException class PreconditionRequiredHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(428, $message, $previous, $headers, $code); parent::__construct(428, $message, $previous, $headers, $code);
} }

View File

@ -17,12 +17,12 @@ namespace Symfony\Component\HttpKernel\Exception;
class ServiceUnavailableHttpException extends HttpException class ServiceUnavailableHttpException extends HttpException
{ {
/** /**
* @param int|string $retryAfter The number of seconds or HTTP-date after which the request may be retried * @param int|string|null $retryAfter The number of seconds or HTTP-date after which the request may be retried
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int|null $code The internal exception code
*/ */
public function __construct($retryAfter = null, string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) public function __construct($retryAfter = null, ?string $message = '', \Throwable $previous = null, ?int $code = 0, array $headers = [])
{ {
if ($retryAfter) { if ($retryAfter) {
$headers['Retry-After'] = $retryAfter; $headers['Retry-After'] = $retryAfter;

View File

@ -19,12 +19,12 @@ namespace Symfony\Component\HttpKernel\Exception;
class TooManyRequestsHttpException extends HttpException class TooManyRequestsHttpException extends HttpException
{ {
/** /**
* @param int|string $retryAfter The number of seconds or HTTP-date after which the request may be retried * @param int|string|null $retryAfter The number of seconds or HTTP-date after which the request may be retried
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int|null $code The internal exception code
*/ */
public function __construct($retryAfter = null, string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) public function __construct($retryAfter = null, ?string $message = '', \Throwable $previous = null, ?int $code = 0, array $headers = [])
{ {
if ($retryAfter) { if ($retryAfter) {
$headers['Retry-After'] = $retryAfter; $headers['Retry-After'] = $retryAfter;

View File

@ -17,12 +17,12 @@ namespace Symfony\Component\HttpKernel\Exception;
class UnauthorizedHttpException extends HttpException class UnauthorizedHttpException extends HttpException
{ {
/** /**
* @param string $challenge WWW-Authenticate challenge string * @param string $challenge WWW-Authenticate challenge string
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int|null $code The internal exception code
*/ */
public function __construct(string $challenge, string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) public function __construct(string $challenge, ?string $message = '', \Throwable $previous = null, ?int $code = 0, array $headers = [])
{ {
$headers['WWW-Authenticate'] = $challenge; $headers['WWW-Authenticate'] = $challenge;

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class UnprocessableEntityHttpException extends HttpException class UnprocessableEntityHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(422, $message, $previous, $headers, $code); parent::__construct(422, $message, $previous, $headers, $code);
} }

View File

@ -17,11 +17,11 @@ namespace Symfony\Component\HttpKernel\Exception;
class UnsupportedMediaTypeHttpException extends HttpException class UnsupportedMediaTypeHttpException extends HttpException
{ {
/** /**
* @param string $message The internal exception message * @param string|null $message The internal exception message
* @param \Throwable $previous The previous exception * @param \Throwable|null $previous The previous exception
* @param int $code The internal exception code * @param int $code The internal exception code
*/ */
public function __construct(string $message = null, \Throwable $previous = null, int $code = 0, array $headers = []) public function __construct(?string $message = '', \Throwable $previous = null, int $code = 0, array $headers = [])
{ {
parent::__construct(415, $message, $previous, $headers, $code); parent::__construct(415, $message, $previous, $headers, $code);
} }

View File

@ -3,10 +3,11 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class AccessDeniedHttpExceptionTest extends HttpExceptionTest class AccessDeniedHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new AccessDeniedHttpException($message, $previous, $code, $headers); return new AccessDeniedHttpException($message, $previous, $code, $headers);
} }

View File

@ -3,10 +3,11 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class BadRequestHttpExceptionTest extends HttpExceptionTest class BadRequestHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new BadRequestHttpException($message, $previous, $code, $headers); return new BadRequestHttpException($message, $previous, $code, $headers);
} }

View File

@ -3,10 +3,11 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\ConflictHttpException; use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class ConflictHttpExceptionTest extends HttpExceptionTest class ConflictHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new ConflictHttpException($message, $previous, $code, $headers); return new ConflictHttpException($message, $previous, $code, $headers);
} }

View File

@ -3,10 +3,11 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\GoneHttpException; use Symfony\Component\HttpKernel\Exception\GoneHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class GoneHttpExceptionTest extends HttpExceptionTest class GoneHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new GoneHttpException($message, $previous, $code, $headers); return new GoneHttpException($message, $previous, $code, $headers);
} }

View File

@ -32,7 +32,7 @@ class HttpExceptionTest extends TestCase
*/ */
public function testHeadersConstructor($headers) public function testHeadersConstructor($headers)
{ {
$exception = new HttpException(200, null, null, $headers); $exception = new HttpException(200, '', null, $headers);
$this->assertSame($headers, $exception->getHeaders()); $this->assertSame($headers, $exception->getHeaders());
} }
@ -50,11 +50,11 @@ class HttpExceptionTest extends TestCase
{ {
$previous = new class('Error of PHP 7+') extends \Error { $previous = new class('Error of PHP 7+') extends \Error {
}; };
$exception = $this->createException(null, $previous); $exception = $this->createException('', $previous);
$this->assertSame($previous, $exception->getPrevious()); $this->assertSame($previous, $exception->getPrevious());
} }
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new HttpException(200, $message, $previous, $headers, $code); return new HttpException(200, $message, $previous, $headers, $code);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException; use Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException;
class LengthRequiredHttpExceptionTest extends HttpExceptionTest class LengthRequiredHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new LengthRequiredHttpException($message, $previous, $code, $headers); return new LengthRequiredHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,6 +2,7 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
class MethodNotAllowedHttpExceptionTest extends HttpExceptionTest class MethodNotAllowedHttpExceptionTest extends HttpExceptionTest
@ -18,7 +19,7 @@ class MethodNotAllowedHttpExceptionTest extends HttpExceptionTest
'Cache-Control' => 'public, s-maxage=1200', 'Cache-Control' => 'public, s-maxage=1200',
]; ];
$exception = new MethodNotAllowedHttpException(['get'], null, null, null, $headers); $exception = new MethodNotAllowedHttpException(['get'], '', null, 0, $headers);
$headers['Allow'] = 'GET'; $headers['Allow'] = 'GET';
@ -35,7 +36,7 @@ class MethodNotAllowedHttpExceptionTest extends HttpExceptionTest
$this->assertSame($headers, $exception->getHeaders()); $this->assertSame($headers, $exception->getHeaders());
} }
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new MethodNotAllowedHttpException(['get'], $message, $previous, $code, $headers); return new MethodNotAllowedHttpException(['get'], $message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException; use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
class NotAcceptableHttpExceptionTest extends HttpExceptionTest class NotAcceptableHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new NotAcceptableHttpException($message, $previous, $code, $headers); return new NotAcceptableHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class NotFoundHttpExceptionTest extends HttpExceptionTest class NotFoundHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new NotFoundHttpException($message, $previous, $code, $headers); return new NotFoundHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException; use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException;
class PreconditionFailedHttpExceptionTest extends HttpExceptionTest class PreconditionFailedHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new PreconditionFailedHttpException($message, $previous, $code, $headers); return new PreconditionFailedHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException; use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
class PreconditionRequiredHttpExceptionTest extends HttpExceptionTest class PreconditionRequiredHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new PreconditionRequiredHttpException($message, $previous, $code, $headers); return new PreconditionRequiredHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,6 +2,7 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException; use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
class ServiceUnavailableHttpExceptionTest extends HttpExceptionTest class ServiceUnavailableHttpExceptionTest extends HttpExceptionTest
@ -18,7 +19,7 @@ class ServiceUnavailableHttpExceptionTest extends HttpExceptionTest
'Cache-Control' => 'public, s-maxage=1337', 'Cache-Control' => 'public, s-maxage=1337',
]; ];
$exception = new ServiceUnavailableHttpException(1337, null, null, null, $headers); $exception = new ServiceUnavailableHttpException(1337, '', null, 0, $headers);
$headers['Retry-After'] = 1337; $headers['Retry-After'] = 1337;
@ -35,7 +36,7 @@ class ServiceUnavailableHttpExceptionTest extends HttpExceptionTest
$this->assertSame($headers, $exception->getHeaders()); $this->assertSame($headers, $exception->getHeaders());
} }
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new ServiceUnavailableHttpException(null, $message, $previous, $code, $headers); return new ServiceUnavailableHttpException(null, $message, $previous, $code, $headers);
} }

View File

@ -2,6 +2,7 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException; use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
class TooManyRequestsHttpExceptionTest extends HttpExceptionTest class TooManyRequestsHttpExceptionTest extends HttpExceptionTest
@ -18,7 +19,7 @@ class TooManyRequestsHttpExceptionTest extends HttpExceptionTest
'Cache-Control' => 'public, s-maxage=69', 'Cache-Control' => 'public, s-maxage=69',
]; ];
$exception = new TooManyRequestsHttpException(69, null, null, null, $headers); $exception = new TooManyRequestsHttpException(69, '', null, 0, $headers);
$headers['Retry-After'] = 69; $headers['Retry-After'] = 69;
@ -35,7 +36,7 @@ class TooManyRequestsHttpExceptionTest extends HttpExceptionTest
$this->assertSame($headers, $exception->getHeaders()); $this->assertSame($headers, $exception->getHeaders());
} }
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new TooManyRequestsHttpException(null, $message, $previous, $code, $headers); return new TooManyRequestsHttpException(null, $message, $previous, $code, $headers);
} }

View File

@ -2,6 +2,7 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
class UnauthorizedHttpExceptionTest extends HttpExceptionTest class UnauthorizedHttpExceptionTest extends HttpExceptionTest
@ -18,7 +19,7 @@ class UnauthorizedHttpExceptionTest extends HttpExceptionTest
'Cache-Control' => 'public, s-maxage=1200', 'Cache-Control' => 'public, s-maxage=1200',
]; ];
$exception = new UnauthorizedHttpException('Challenge', null, null, null, $headers); $exception = new UnauthorizedHttpException('Challenge', '', null, 0, $headers);
$headers['WWW-Authenticate'] = 'Challenge'; $headers['WWW-Authenticate'] = 'Challenge';
@ -35,7 +36,7 @@ class UnauthorizedHttpExceptionTest extends HttpExceptionTest
$this->assertSame($headers, $exception->getHeaders()); $this->assertSame($headers, $exception->getHeaders());
} }
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new UnauthorizedHttpException('Challenge', $message, $previous, $code, $headers); return new UnauthorizedHttpException('Challenge', $message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
class UnprocessableEntityHttpExceptionTest extends HttpExceptionTest class UnprocessableEntityHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new UnprocessableEntityHttpException($message, $previous, $code, $headers); return new UnprocessableEntityHttpException($message, $previous, $code, $headers);
} }

View File

@ -2,11 +2,12 @@
namespace Symfony\Component\HttpKernel\Tests\Exception; namespace Symfony\Component\HttpKernel\Tests\Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException; use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException;
class UnsupportedMediaTypeHttpExceptionTest extends HttpExceptionTest class UnsupportedMediaTypeHttpExceptionTest extends HttpExceptionTest
{ {
protected function createException(string $message = null, \Throwable $previous = null, ?int $code = 0, array $headers = []) protected function createException(string $message = '', \Throwable $previous = null, int $code = 0, array $headers = []): HttpException
{ {
return new UnsupportedMediaTypeHttpException($message, $previous, $code, $headers); return new UnsupportedMediaTypeHttpException($message, $previous, $code, $headers);
} }

View File

@ -20,7 +20,7 @@ class HttpTransportException extends TransportException
{ {
private $response; private $response;
public function __construct(string $message = null, ResponseInterface $response, int $code = 0, \Throwable $previous = null) public function __construct(?string $message, ResponseInterface $response, int $code = 0, \Throwable $previous = null)
{ {
parent::__construct($message, $code, $previous); parent::__construct($message, $code, $previous);

View File

@ -22,7 +22,10 @@ class MethodNotAllowedException extends \RuntimeException implements ExceptionIn
{ {
protected $allowedMethods = []; protected $allowedMethods = [];
public function __construct(array $allowedMethods, string $message = null, int $code = 0, \Throwable $previous = null) /**
* @param string[] $allowedMethods
*/
public function __construct(array $allowedMethods, ?string $message = '', int $code = 0, \Throwable $previous = null)
{ {
$this->allowedMethods = array_map('strtoupper', $allowedMethods); $this->allowedMethods = array_map('strtoupper', $allowedMethods);
@ -32,7 +35,7 @@ class MethodNotAllowedException extends \RuntimeException implements ExceptionIn
/** /**
* Gets the allowed HTTP methods. * Gets the allowed HTTP methods.
* *
* @return array * @return string[]
*/ */
public function getAllowedMethods() public function getAllowedMethods()
{ {

View File

@ -97,10 +97,8 @@ class AnnotationFileLoader extends FileLoader
if (\defined('T_NAME_QUALIFIED')) { if (\defined('T_NAME_QUALIFIED')) {
$nsTokens[\T_NAME_QUALIFIED] = true; $nsTokens[\T_NAME_QUALIFIED] = true;
} }
for ($i = 0; isset($tokens[$i]); ++$i) { for ($i = 0; isset($tokens[$i]); ++$i) {
$token = $tokens[$i]; $token = $tokens[$i];
if (!isset($token[1])) { if (!isset($token[1])) {
continue; continue;
} }
@ -122,6 +120,9 @@ class AnnotationFileLoader extends FileLoader
$skipClassToken = false; $skipClassToken = false;
for ($j = $i - 1; $j > 0; --$j) { for ($j = $i - 1; $j > 0; --$j) {
if (!isset($tokens[$j][1])) { if (!isset($tokens[$j][1])) {
if ('(' === $tokens[$j] || ',' === $tokens[$j]) {
$skipClassToken = true;
}
break; break;
} }

View File

@ -350,11 +350,11 @@ class RouteCollectionBuilder
} }
if (null === $resolver = $this->loader->getResolver()) { if (null === $resolver = $this->loader->getResolver()) {
throw new LoaderLoadException($resource, null, null, null, $type); throw new LoaderLoadException($resource, null, 0, null, $type);
} }
if (false === $loader = $resolver->resolve($resource, $type)) { if (false === $loader = $resolver->resolve($resource, $type)) {
throw new LoaderLoadException($resource, null, null, null, $type); throw new LoaderLoadException($resource, null, 0, null, $type);
} }
$collections = $loader->load($resource, $type); $collections = $loader->load($resource, $type);

View File

@ -0,0 +1,16 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\Attributes;
#[\Attribute(\Attribute::TARGET_CLASS)]
class FooAttributes
{
public string $class;
public array $foo = [];
public function __construct(string $class, array $foo)
{
$this->class = $class;
$this->foo = $foo;
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(
foo: [
'bar' => ['foo','bar'],
'foo'
],
class: User::class
)]
class AttributesClassParamAfterCommaController
{
}

View File

@ -0,0 +1,18 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(
class: User::class,
foo: [
'bar' => ['foo','bar'],
'foo'
]
)]
class AttributesClassParamAfterParenthesisController
{
}

View File

@ -0,0 +1,12 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(foo: ['bar' => ['foo','bar'],'foo'],class: User::class)]
class AttributesClassParamInlineAfterCommaController
{
}

View File

@ -0,0 +1,12 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(class: User::class,foo: ['bar' => ['foo','bar'],'foo'])]
class AttributesClassParamInlineAfterParenthesisController
{
}

View File

@ -0,0 +1,12 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(foo: ['bar' => ['foo','bar'],'foo'],class: 'Symfony\Component\Security\Core\User\User')]
class AttributesClassParamInlineQuotedAfterCommaController
{
}

View File

@ -0,0 +1,12 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
use Symfony\Component\Security\Core\User\User;
#[FooAttributes(class: 'Symfony\Component\Security\Core\User\User',foo: ['bar' => ['foo','bar'],'foo'])]
class AttributesClassParamInlineQuotedAfterParenthesisController
{
}

View File

@ -0,0 +1,17 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
#[FooAttributes(
foo: [
'bar' => ['foo','bar'],
'foo'
],
class: 'Symfony\Component\Security\Core\User\User'
)]
class AttributesClassParamQuotedAfterCommaController
{
}

View File

@ -0,0 +1,17 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributesFixtures;
use Symfony\Component\Routing\Tests\Fixtures\Attributes\FooAttributes;
#[FooAttributes(
class: 'Symfony\Component\Security\Core\User\User',
foo: [
'bar' => ['foo','bar'],
'foo'
]
)]
class AttributesClassParamQuotedAfterParenthesisController
{
}

View File

@ -85,4 +85,72 @@ class AnnotationFileLoaderTest extends AbstractAnnotationLoaderTest
$this->assertTrue($this->loader->supports($fixture, 'annotation'), '->supports() checks the resource type if specified'); $this->assertTrue($this->loader->supports($fixture, 'annotation'), '->supports() checks the resource type if specified');
$this->assertFalse($this->loader->supports($fixture, 'foo'), '->supports() checks the resource type if specified'); $this->assertFalse($this->loader->supports($fixture, 'foo'), '->supports() checks the resource type if specified');
} }
/**
* @requires PHP 8
*/
public function testLoadAttributesClassAfterComma()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamAfterCommaController.php');
}
public function testLoadAttributesInlineClassAfterComma()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamInlineAfterCommaController.php');
}
/**
* @requires PHP 8
*/
public function testLoadAttributesQuotedClassAfterComma()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamQuotedAfterCommaController.php');
}
public function testLoadAttributesInlineQuotedClassAfterComma()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamInlineQuotedAfterCommaController.php');
}
/**
* @requires PHP 8
*/
public function testLoadAttributesClassAfterParenthesis()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamAfterParenthesisController.php');
}
public function testLoadAttributesInlineClassAfterParenthesis()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamInlineAfterParenthesisController.php');
}
/**
* @requires PHP 8
*/
public function testLoadAttributesQuotedClassAfterParenthesis()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamQuotedAfterParenthesisController.php');
}
public function testLoadAttributesInlineQuotedClassAfterParenthesis()
{
$this->reader->expects($this->once())->method('getClassAnnotation');
$this->loader->load(__DIR__.'/../Fixtures/AttributesFixtures/AttributesClassParamInlineQuotedAfterParenthesisController.php');
}
} }

View File

@ -28,7 +28,6 @@ class ParseException extends RuntimeException
* @param int $parsedLine The line where the error occurred * @param int $parsedLine The line where the error occurred
* @param string|null $snippet The snippet of code near the problem * @param string|null $snippet The snippet of code near the problem
* @param string|null $parsedFile The file name where the error occurred * @param string|null $parsedFile The file name where the error occurred
* @param \Exception|null $previous The previous exception
*/ */
public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null)
{ {