Skip to content

Commit aae9600

Browse files
committed
use isResourceClass to improve performance over lots of calls
1 parent d99665f commit aae9600

File tree

7 files changed

+9
-25
lines changed

7 files changed

+9
-25
lines changed

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)