From 86e938b46eb20ee40da8387e29bbda15cbbe58b7 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Tue, 26 Oct 2021 15:35:05 +0200 Subject: [PATCH] Provide PSR array cache and switch annotation reader to it The annotation reader was using CachedReader which has been deprecated so we need to switch to PsrCachedReader Since 2.0 doctrine/cache no longer provides implementations of caches so I also needed to implement a simple PSR array cache. [MAILPOET-3892] --- .../Annotations/AnnotationReaderProvider.php | 13 ++- lib/Doctrine/PSRArrayCache.php | 88 +++++++++++++++++++ 2 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 lib/Doctrine/PSRArrayCache.php diff --git a/lib/Doctrine/Annotations/AnnotationReaderProvider.php b/lib/Doctrine/Annotations/AnnotationReaderProvider.php index af98edba20..c2ffa4e71e 100644 --- a/lib/Doctrine/Annotations/AnnotationReaderProvider.php +++ b/lib/Doctrine/Annotations/AnnotationReaderProvider.php @@ -2,29 +2,28 @@ namespace MailPoet\Doctrine\Annotations; +use MailPoet\Doctrine\PSRArrayCache; use MailPoetVendor\Doctrine\Common\Annotations\AnnotationReader; use MailPoetVendor\Doctrine\Common\Annotations\AnnotationRegistry; -use MailPoetVendor\Doctrine\Common\Annotations\CachedReader; -use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; +use MailPoetVendor\Doctrine\Common\Annotations\PsrCachedReader; class AnnotationReaderProvider { - /** @var CachedReader */ + /** @var PsrCachedReader */ private $annotationReader; public function __construct() { // register annotation reader if doctrine/annotations package is installed // (i.e. in dev environment, on production metadata is dumped in the build) - $readAnnotations = class_exists(CachedReader::class) && class_exists(AnnotationReader::class); + $readAnnotations = class_exists(PsrCachedReader::class) && class_exists(AnnotationReader::class); if ($readAnnotations) { // autoload all annotation classes using registered loaders (Composer) // (needed for Symfony\Validator constraint annotations to be loaded) AnnotationRegistry::registerLoader('class_exists'); - $this->annotationReader = new CachedReader(new AnnotationReader(), new ArrayCache()); + $this->annotationReader = new PsrCachedReader(new AnnotationReader(), new PSRArrayCache()); } } - /** @return CachedReader|null */ - public function getAnnotationReader() { + public function getAnnotationReader(): ?PsrCachedReader { return $this->annotationReader; } } diff --git a/lib/Doctrine/PSRArrayCache.php b/lib/Doctrine/PSRArrayCache.php new file mode 100644 index 0000000000..5633b7de15 --- /dev/null +++ b/lib/Doctrine/PSRArrayCache.php @@ -0,0 +1,88 @@ +hasItem($key)) { + return new PSRCacheItem($key, false); + } + return new PSRCacheItem($key, $this->cache[$key]); + } + + public function getItems(array $keys = []) { + return array_map([$this, 'getItem'], $keys); + } + + /** + * @inheritDoc + */ + public function hasItem($key) { + return array_key_exists($key, $this->cache); + } + + /** + * @inheritDoc + */ + public function clear() { + $this->cache = []; + return true; + } + + /** + * @inheritDoc + */ + public function deleteItem($key) { + if (!is_string($key)) { + throw new PSRCacheInvalidArgumentException('Invalid key'); + } + unset($this->cache[$key]); + return true; + } + + /** + * @inheritDoc + */ + public function deleteItems(array $keys) { + try { + array_map([$this, 'deleteItem'], $keys); + } catch (PSRCacheInvalidArgumentException $e) { + return false; + } + return true; + } + + /** + * @inheritDoc + */ + public function save(CacheItemInterface $item) { + $this->cache[$item->getKey()] = $item->get(); + return true; + } + + /** + * @inheritDoc + */ + public function saveDeferred(CacheItemInterface $item) { + return $this->save($item); + } + + /** + * @inheritDoc + */ + public function commit() { + return true; + } +}