Skip to content

Commit 972eb05

Browse files
committed
Merge branch '7.0' into 7.1
* 7.0: Update PR template Review Indonesian (id) translation [Security] reviewed Latvian translation of key 20 [VarExporter] Fix exporting default values involving global constants review: RU translation [Security] reviewed Polish translation of key 20 Reviewing translations for Japanese. [Serializer] Cache readability/writability computation Update security.fr.xlf
2 parents f43a533 + e205ae5 commit 972eb05

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

Normalizer/ObjectNormalizer.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
final class ObjectNormalizer extends AbstractObjectNormalizer
3434
{
3535
private static $reflectionCache = [];
36+
private static $isReadableCache = [];
37+
private static $isWritableCache = [];
3638

3739
protected PropertyAccessorInterface $propertyAccessor;
3840
protected $propertyInfoExtractor;
@@ -170,21 +172,23 @@ protected function isAllowedAttribute($classOrObject, string $attribute, ?string
170172
if (!parent::isAllowedAttribute($classOrObject, $attribute, $format, $context)) {
171173
return false;
172174
}
175+
173176
$class = \is_object($classOrObject) ? \get_class($classOrObject) : $classOrObject;
174177

175178
if ($context['_read_attributes'] ?? true) {
176-
return $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute);
177-
}
179+
if (!isset(self::$isReadableCache[$class.$attribute])) {
180+
self::$isReadableCache[$class.$attribute] = $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute);
181+
}
178182

179-
if ($this->propertyInfoExtractor->isWritable($class, $attribute)) {
180-
return true;
183+
return self::$isReadableCache[$class.$attribute];
181184
}
182185

183-
if (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType()) {
184-
return true;
186+
if (!isset(self::$isWritableCache[$class.$attribute])) {
187+
self::$isWritableCache[$class.$attribute] = $this->propertyInfoExtractor->isWritable($class, $attribute)
188+
|| (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType());
185189
}
186190

187-
return false;
191+
return self::$isWritableCache[$class.$attribute];
188192
}
189193

190194
private function hasAttributeAccessorMethod(string $class, string $attribute): bool

0 commit comments

Comments
 (0)