Skip to content

Commit 475689b

Browse files
authored
Merge pull request #1921 from bendavies/supports-normaliziation-perf
ItemNormalizer: Supports normalization performance
2 parents 730a35c + aae9600 commit 475689b

File tree

8 files changed

+10
-27
lines changed

8 files changed

+10
-27
lines changed

src/GraphQl/Serializer/ItemNormalizer.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
namespace ApiPlatform\Core\GraphQl\Serializer;
2323

2424
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
25-
use ApiPlatform\Core\Serializer\AbstractItemNormalizer;
2625
use ApiPlatform\Core\Serializer\ItemNormalizer as BaseItemNormalizer;
2726

2827
/**
@@ -48,7 +47,7 @@ public function supportsNormalization($data, $format = null)
4847
*/
4948
public function normalize($object, $format = null, array $context = [])
5049
{
51-
$data = AbstractItemNormalizer::normalize($object, $format, $context);
50+
$data = parent::normalize($object, $format, $context);
5251
$data[self::ITEM_KEY] = serialize($object); // calling serialize prevent weird normalization process done by Webonyx's GraphQL PHP
5352

5453
return $data;

src/Serializer/AbstractItemNormalizer.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2323
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
2424
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
25+
use ApiPlatform\Core\Util\ClassInfoTrait;
2526
use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
2627
use Symfony\Component\PropertyAccess\PropertyAccess;
2728
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
@@ -37,6 +38,7 @@
3738
*/
3839
abstract class AbstractItemNormalizer extends AbstractObjectNormalizer
3940
{
41+
use ClassInfoTrait;
4042
use ContextTrait;
4143

4244
protected $propertyNameCollectionFactory;
@@ -74,13 +76,7 @@ public function supportsNormalization($data, $format = null)
7476
return false;
7577
}
7678

77-
try {
78-
$this->resourceClassResolver->getResourceClass($data);
79-
} catch (InvalidArgumentException $e) {
80-
return false;
81-
}
82-
83-
return true;
79+
return $this->resourceClassResolver->isResourceClass($this->getObjectClass($data));
8480
}
8581

8682
/**

tests/GraphQl/Serializer/ItemNormalizerTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
18-
use ApiPlatform\Core\Exception\InvalidArgumentException;
1918
use ApiPlatform\Core\GraphQl\Serializer\ItemNormalizer;
2019
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2120
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
@@ -44,8 +43,6 @@ public function testSupportNormalization()
4443
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
4544

4645
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
47-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
48-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
4946
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
5047
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
5148

tests/Hal/Serializer/ItemNormalizerTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
18-
use ApiPlatform\Core\Exception\InvalidArgumentException;
1918
use ApiPlatform\Core\Hal\Serializer\ItemNormalizer;
2019
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2120
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
@@ -64,8 +63,8 @@ public function testSupportNormalization()
6463
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
6564

6665
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
67-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
68-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
66+
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
67+
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
6968

7069
$normalizer = new ItemNormalizer(
7170
$propertyNameCollectionFactoryProphecy->reveal(),

tests/Hydra/Serializer/ItemNormalizerTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
18-
use ApiPlatform\Core\Exception\InvalidArgumentException;
1918
use ApiPlatform\Core\JsonLd\ContextBuilderInterface;
2019
use ApiPlatform\Core\JsonLd\Serializer\ItemNormalizer;
2120
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
@@ -64,8 +63,8 @@ public function testSupportNormalization()
6463
$contextBuilderProphecy = $this->prophesize(ContextBuilderInterface::class);
6564

6665
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
67-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
68-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
66+
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
67+
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
6968

7069
$normalizer = new ItemNormalizer(
7170
$resourceMetadataFactoryProphecy->reveal(),

tests/JsonApi/Serializer/ItemNormalizerTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
18-
use ApiPlatform\Core\Exception\InvalidArgumentException;
1918
use ApiPlatform\Core\JsonApi\Serializer\ItemNormalizer;
2019
use ApiPlatform\Core\JsonApi\Serializer\ReservedAttributeNameConverter;
2120
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
@@ -67,8 +66,8 @@ public function testSupportNormalization()
6766
$dummy = new Dummy();
6867

6968
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
70-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
71-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
69+
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
70+
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
7271

7372
$normalizer = new ItemNormalizer(
7473
$this->prophesize(PropertyNameCollectionFactoryInterface::class)->reveal(),

tests/Serializer/AbstractItemNormalizerTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
1818
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
19-
use ApiPlatform\Core\Exception\InvalidArgumentException;
2019
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2120
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
2221
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
@@ -53,8 +52,6 @@ public function testSupportNormalizationAndSupportDenormalization()
5352
$propertyAccessorProphecy = $this->prophesize(PropertyAccessorInterface::class);
5453

5554
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
56-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
57-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
5855
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
5956
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
6057

tests/Serializer/ItemNormalizerTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use ApiPlatform\Core\Api\IriConverterInterface;
1717
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
18-
use ApiPlatform\Core\Exception\InvalidArgumentException;
1918
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2019
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
2120
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
@@ -44,8 +43,6 @@ public function testSupportNormalization()
4443
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
4544

4645
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
47-
$resourceClassResolverProphecy->getResourceClass($dummy)->willReturn(Dummy::class)->shouldBeCalled();
48-
$resourceClassResolverProphecy->getResourceClass($std)->willThrow(new InvalidArgumentException())->shouldBeCalled();
4946
$resourceClassResolverProphecy->isResourceClass(Dummy::class)->willReturn(true)->shouldBeCalled();
5047
$resourceClassResolverProphecy->isResourceClass(\stdClass::class)->willReturn(false)->shouldBeCalled();
5148

0 commit comments

Comments
 (0)