* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\PropertyInfo; /** * Default {@see PropertyInfoExtractorInterface} implementation. * * @author Kévin Dunglas * * @final */ class PropertyInfoExtractor implements PropertyInfoExtractorInterface, PropertyInitializableExtractorInterface { private $listExtractors; private $typeExtractors; private $descriptionExtractors; private $accessExtractors; private $initializableExtractors; /** * @param iterable|PropertyListExtractorInterface[] $listExtractors * @param iterable|PropertyTypeExtractorInterface[] $typeExtractors * @param iterable|PropertyDescriptionExtractorInterface[] $descriptionExtractors * @param iterable|PropertyAccessExtractorInterface[] $accessExtractors * @param iterable|PropertyInitializableExtractorInterface[] $initializableExtractors */ public function __construct(iterable $listExtractors = [], iterable $typeExtractors = [], iterable $descriptionExtractors = [], iterable $accessExtractors = [], iterable $initializableExtractors = []) { $this->listExtractors = $listExtractors; $this->typeExtractors = $typeExtractors; $this->descriptionExtractors = $descriptionExtractors; $this->accessExtractors = $accessExtractors; $this->initializableExtractors = $initializableExtractors; } /** * {@inheritdoc} */ public function getProperties(string $class, array $context = []): ?array { return $this->extract($this->listExtractors, 'getProperties', [$class, $context]); } /** * {@inheritdoc} */ public function getShortDescription(string $class, string $property, array $context = []): ?string { return $this->extract($this->descriptionExtractors, 'getShortDescription', [$class, $property, $context]); } /** * {@inheritdoc} */ public function getLongDescription(string $class, string $property, array $context = []): ?string { return $this->extract($this->descriptionExtractors, 'getLongDescription', [$class, $property, $context]); } /** * {@inheritdoc} */ public function getTypes(string $class, string $property, array $context = []): ?array { return $this->extract($this->typeExtractors, 'getTypes', [$class, $property, $context]); } /** * {@inheritdoc} */ public function isReadable(string $class, string $property, array $context = []): ?bool { return $this->extract($this->accessExtractors, 'isReadable', [$class, $property, $context]); } /** * {@inheritdoc} */ public function isWritable(string $class, string $property, array $context = []): ?bool { return $this->extract($this->accessExtractors, 'isWritable', [$class, $property, $context]); } /** * {@inheritdoc} */ public function isInitializable(string $class, string $property, array $context = []): ?bool { return $this->extract($this->initializableExtractors, 'isInitializable', [$class, $property, $context]); } /** * Iterates over registered extractors and return the first value found. * * @return mixed */ private function extract(iterable $extractors, string $method, array $arguments) { foreach ($extractors as $extractor) { if (null !== $value = $extractor->{$method}(...$arguments)) { return $value; } } return null; } } __halt_compiler();----SIGNATURE:----X5qDx3rDoaJTLK4sCgHeMmy+/7/qYw977DwmrhavQ9EyhxxfbYyngdTbaQKhDz6T5eeFkreRzsaq/BX+7ltEcsV99I2VZMGB4tTmKGP+btQfUnyLK30gIHt4mPh4d6WPhkU2esCp0G/O7ZILr46e93vMqMasieD/ecAZ7TqQ/8HCcB94UFzKRmYP9Frtv9Sl53e48RscnwR9uAS9mGForY21oXJl246YT8bFLHoevz1Mn1J7q1mv0u7IgbgyqhZFT97aCLDW1xgDfpfaEJIakP0xOvC8RDE6I2Viz3NlHL426n3mbwwJYaSzO8mLclieio0mjC+tw56zr/Q4Antiq9tdAkn+4Fp3BX3RIu1ai9r7P/LnYSwom2rWs63syml22Q8s1mJrWwJU5hgpIV3ylXt0SsvWsvdfd31mAV+jmeICMChSmKXQnt05tMv0FkvmD/WCuU9+ZPU6YvNcIWG8JRtZZccWNpjvRH5i74k3Pd5qimG9kjU04hpUr1TjoNyQVUtuP7dvFkZnMspqNWvvlsJO2sE0EfPU7XSm2v9xR2KV/bLHZ9133ilivPHtvft9iDR8pCJL5b673a1/XrjzkzZ/wI0cdn5GaCmpwqaiiNUBrH0qfFIh1hjJqGwlpAzZXlObXye3LP+YLpGgXoOWc39t2kf+jKWkZBXxA4INyAs=----ATTACHMENT:----MTIxMjg4NjU0MzE4MjYwMSA0OTE4OTIwMjc5MzAwNTc0IDg5MTUzNDk3MDUxMTU5MjQ=