Skip to content

Commit 45355fa

Browse files
committed
optimize extractors
1 parent d6adc4e commit 45355fa

File tree

2 files changed

+20
-21
lines changed

2 files changed

+20
-21
lines changed

src/Symfony/Extractor/FailOverExtractor.php renamed to src/Symfony/Extractor/CombinedExtractor.php

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,23 @@
1717
use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface;
1818

1919
/**
20+
*
2021
*/
21-
final class FailOverExtractor implements PropertyTypeExtractorInterface
22+
final class CombinedExtractor implements PropertyTypeExtractorInterface
2223
{
23-
/**
24-
* @psalm-var array<string, \Symfony\Component\PropertyInfo\Type[]|null>
25-
*/
24+
/** @psalm-var array<string, \Symfony\Component\PropertyInfo\Type[]|null> */
2625
private $localStorage = [];
2726

28-
/**
29-
* @var PropertyTypeExtractorInterface[]
30-
*/
31-
private $extractors;
27+
/** @var PhpDocExtractor */
28+
private $phpDocExtractor;
29+
30+
/** @var ReflectionExtractor */
31+
private $reflectionPropertyExtractor;
3232

3333
public function __construct()
3434
{
35-
$this->extractors = [new PhpDocExtractor(), new ReflectionExtractor()];
35+
$this->phpDocExtractor = new PhpDocExtractor();
36+
$this->reflectionPropertyExtractor = new ReflectionExtractor();
3637
}
3738

3839
/**
@@ -44,19 +45,14 @@ public function getTypes(string $class, string $property, array $context = []):
4445

4546
if (\array_key_exists($cacheKey, $this->localStorage) === false)
4647
{
47-
$this->localStorage[$cacheKey] = null;
48+
$types = $this->phpDocExtractor->getTypes($class, $property, $context);
4849

49-
foreach ($this->extractors as $extractor)
50+
if ($types === null)
5051
{
51-
$types = $extractor->getTypes($class, $property, $context);
52-
53-
if (null !== $types)
54-
{
55-
$this->localStorage[$cacheKey] = $types;
56-
57-
break;
58-
}
52+
$types = $this->reflectionPropertyExtractor->getTypes($class, $property, $context);
5953
}
54+
55+
$this->localStorage[$cacheKey] = $types;
6056
}
6157

6258
return $this->localStorage[$cacheKey];

src/Symfony/SymfonyMessageSerializer.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020
use ServiceBus\MessageSerializer\MessageDecoder;
2121
use ServiceBus\MessageSerializer\MessageEncoder;
2222
use ServiceBus\MessageSerializer\Serializer;
23-
use ServiceBus\MessageSerializer\Symfony\Extractor\FailOverExtractor;
23+
use ServiceBus\MessageSerializer\Symfony\Extractor\CombinedExtractor;
2424
use ServiceBus\MessageSerializer\SymfonyNormalizer\Extensions\EmptyDataNormalizer;
2525
use ServiceBus\MessageSerializer\SymfonyNormalizer\Extensions\PropertyNameConverter;
2626
use ServiceBus\MessageSerializer\SymfonyNormalizer\Extensions\PropertyNormalizerWrapper;
27+
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
2728
use Symfony\Component\Serializer as SymfonySerializer;
2829
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
2930

@@ -51,10 +52,12 @@ final class SymfonyMessageSerializer implements MessageEncoder, MessageDecoder
5152
*/
5253
public function __construct(Serializer $serializer = null, array $normalizers = [])
5354
{
55+
$extractor = \PHP_VERSION_ID >= 70400 ? new CombinedExtractor() : new PhpDocExtractor();
56+
5457
$defaultNormalizers = [
5558
new DateTimeNormalizer(['datetime_format' => 'c']),
5659
new SymfonySerializer\Normalizer\ArrayDenormalizer(),
57-
new PropertyNormalizerWrapper(null, new PropertyNameConverter(), new FailOverExtractor()),
60+
new PropertyNormalizerWrapper(null, new PropertyNameConverter(), $extractor),
5861
new EmptyDataNormalizer(),
5962
];
6063

0 commit comments

Comments
 (0)