mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 23:32:17 +02:00
N°8910 - Upgrade Symfony packages
This commit is contained in:
@@ -20,6 +20,9 @@ use Symfony\Component\VarExporter\Exception\ClassNotFoundException;
|
||||
*/
|
||||
class Hydrator
|
||||
{
|
||||
public const PROPERTY_HAS_HOOKS = 1;
|
||||
public const PROPERTY_NOT_BY_REF = 2;
|
||||
|
||||
public static array $hydrators = [];
|
||||
public static array $simpleHydrators = [];
|
||||
public static array $propertyScopes = [];
|
||||
@@ -70,11 +73,11 @@ class Hydrator
|
||||
return $baseHydrator;
|
||||
|
||||
case 'ErrorException':
|
||||
return $baseHydrator->bindTo(null, new class() extends \ErrorException {
|
||||
return $baseHydrator->bindTo(null, new class extends \ErrorException {
|
||||
});
|
||||
|
||||
case 'TypeError':
|
||||
return $baseHydrator->bindTo(null, new class() extends \Error {
|
||||
return $baseHydrator->bindTo(null, new class extends \Error {
|
||||
});
|
||||
|
||||
case 'SplObjectStorage':
|
||||
@@ -83,7 +86,7 @@ class Hydrator
|
||||
if ("\0" === $name) {
|
||||
foreach ($values as $i => $v) {
|
||||
for ($j = 0; $j < \count($v); ++$j) {
|
||||
$objects[$i]->attach($v[$j], $v[++$j]);
|
||||
$objects[$i][$v[$j]] = $v[++$j];
|
||||
}
|
||||
}
|
||||
continue;
|
||||
@@ -156,13 +159,16 @@ class Hydrator
|
||||
public static function getSimpleHydrator($class)
|
||||
{
|
||||
$baseHydrator = self::$simpleHydrators['stdClass'] ??= (function ($properties, $object) {
|
||||
$readonly = (array) $this;
|
||||
$notByRef = (array) $this;
|
||||
|
||||
foreach ($properties as $name => &$value) {
|
||||
$object->$name = $value;
|
||||
|
||||
if (!($readonly[$name] ?? false)) {
|
||||
if (!$noRef = $notByRef[$name] ?? false) {
|
||||
$object->$name = $value;
|
||||
$object->$name = &$value;
|
||||
} elseif (true !== $noRef) {
|
||||
$noRef($object, $value);
|
||||
} else {
|
||||
$object->$name = $value;
|
||||
}
|
||||
}
|
||||
})->bindTo(new \stdClass());
|
||||
@@ -172,11 +178,11 @@ class Hydrator
|
||||
return $baseHydrator;
|
||||
|
||||
case 'ErrorException':
|
||||
return $baseHydrator->bindTo(new \stdClass(), new class() extends \ErrorException {
|
||||
return $baseHydrator->bindTo(new \stdClass(), new class extends \ErrorException {
|
||||
});
|
||||
|
||||
case 'TypeError':
|
||||
return $baseHydrator->bindTo(new \stdClass(), new class() extends \Error {
|
||||
return $baseHydrator->bindTo(new \stdClass(), new class extends \Error {
|
||||
});
|
||||
|
||||
case 'SplObjectStorage':
|
||||
@@ -188,7 +194,7 @@ class Hydrator
|
||||
continue;
|
||||
}
|
||||
for ($i = 0; $i < \count($value); ++$i) {
|
||||
$object->attach($value[$i], $value[++$i]);
|
||||
$object[$value[$i]] = $value[++$i];
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -217,14 +223,19 @@ class Hydrator
|
||||
}
|
||||
|
||||
if (!$classReflector->isInternal()) {
|
||||
$readonly = new \stdClass();
|
||||
foreach ($classReflector->getProperties(\ReflectionProperty::IS_READONLY) as $propertyReflector) {
|
||||
if ($class === $propertyReflector->class) {
|
||||
$readonly->{$propertyReflector->name} = true;
|
||||
$notByRef = new \stdClass();
|
||||
foreach ($classReflector->getProperties() as $propertyReflector) {
|
||||
if ($propertyReflector->isStatic()) {
|
||||
continue;
|
||||
}
|
||||
if (\PHP_VERSION_ID >= 80400 && !$propertyReflector->isAbstract() && $propertyReflector->getHooks()) {
|
||||
$notByRef->{$propertyReflector->name} = $propertyReflector->setRawValue(...);
|
||||
} elseif ($propertyReflector->isReadOnly()) {
|
||||
$notByRef->{$propertyReflector->name} = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $baseHydrator->bindTo($readonly, $class);
|
||||
return $baseHydrator->bindTo($notByRef, $class);
|
||||
}
|
||||
|
||||
if ($classReflector->name !== $class) {
|
||||
@@ -269,12 +280,23 @@ class Hydrator
|
||||
continue;
|
||||
}
|
||||
$name = $property->name;
|
||||
$access = ($flags << 2) | ($flags & \ReflectionProperty::IS_READONLY ? self::PROPERTY_NOT_BY_REF : 0);
|
||||
|
||||
if (\PHP_VERSION_ID >= 80400 && !$property->isAbstract() && $h = $property->getHooks()) {
|
||||
$access |= self::PROPERTY_HAS_HOOKS | (isset($h['get']) && !$h['get']->returnsReference() ? self::PROPERTY_NOT_BY_REF : 0);
|
||||
}
|
||||
|
||||
if (\ReflectionProperty::IS_PRIVATE & $flags) {
|
||||
$propertyScopes["\0$class\0$name"] = $propertyScopes[$name] = [$class, $name, $flags & \ReflectionProperty::IS_READONLY ? $class : null, $property];
|
||||
$propertyScopes["\0$class\0$name"] = $propertyScopes[$name] = [$class, $name, null, $access, $property];
|
||||
|
||||
continue;
|
||||
}
|
||||
$propertyScopes[$name] = [$class, $name, $flags & \ReflectionProperty::IS_READONLY ? $property->class : null, $property];
|
||||
|
||||
$propertyScopes[$name] = [$class, $name, null, $access, $property];
|
||||
|
||||
if ($flags & (\PHP_VERSION_ID >= 80400 ? \ReflectionProperty::IS_PRIVATE_SET : \ReflectionProperty::IS_READONLY)) {
|
||||
$propertyScopes[$name][2] = $property->class;
|
||||
}
|
||||
|
||||
if (\ReflectionProperty::IS_PROTECTED & $flags) {
|
||||
$propertyScopes["\0*\0$name"] = $propertyScopes[$name];
|
||||
@@ -285,12 +307,20 @@ class Hydrator
|
||||
$class = $r->name;
|
||||
|
||||
foreach ($r->getProperties(\ReflectionProperty::IS_PRIVATE) as $property) {
|
||||
if (!$property->isStatic()) {
|
||||
$name = $property->name;
|
||||
$readonlyScope = $property->isReadOnly() ? $class : null;
|
||||
$propertyScopes["\0$class\0$name"] = [$class, $name, $readonlyScope, $property];
|
||||
$propertyScopes[$name] ??= [$class, $name, $readonlyScope, $property];
|
||||
$flags = $property->getModifiers();
|
||||
|
||||
if (\ReflectionProperty::IS_STATIC & $flags) {
|
||||
continue;
|
||||
}
|
||||
$name = $property->name;
|
||||
$access = ($flags << 2) | ($flags & \ReflectionProperty::IS_READONLY ? self::PROPERTY_NOT_BY_REF : 0);
|
||||
|
||||
if (\PHP_VERSION_ID >= 80400 && $h = $property->getHooks()) {
|
||||
$access |= self::PROPERTY_HAS_HOOKS | (isset($h['get']) && !$h['get']->returnsReference() ? self::PROPERTY_NOT_BY_REF : 0);
|
||||
}
|
||||
|
||||
$propertyScopes["\0$class\0$name"] = [$class, $name, null, $access, $property];
|
||||
$propertyScopes[$name] ??= $propertyScopes["\0$class\0$name"];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user