PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.8.3
Kubio AI Page Builder v2.8.3
2.8.4 2.8.3 2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / vendor / symfony / property-info / PropertyInfoExtractor.php
kubio / vendor / symfony / property-info Last commit date
DependencyInjection 1 year ago Extractor 1 year ago PhpStan 1 year ago Util 1 year ago CHANGELOG.md 1 year ago LICENSE 1 year ago PropertyAccessExtractorInterface.php 1 year ago PropertyDescriptionExtractorInterface.php 1 year ago PropertyInfoCacheExtractor.php 1 year ago PropertyInfoExtractor.php 1 year ago PropertyInfoExtractorInterface.php 1 year ago PropertyInitializableExtractorInterface.php 1 year ago PropertyListExtractorInterface.php 1 year ago PropertyReadInfo.php 1 year ago PropertyReadInfoExtractorInterface.php 1 year ago PropertyTypeExtractorInterface.php 1 year ago PropertyWriteInfo.php 1 year ago PropertyWriteInfoExtractorInterface.php 1 year ago README.md 1 year ago Type.php 1 year ago composer.json 1 year ago
PropertyInfoExtractor.php
120 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\PropertyInfo;
13
14 /**
15 * Default {@see PropertyInfoExtractorInterface} implementation.
16 *
17 * @author Kévin Dunglas <dunglas@gmail.com>
18 *
19 * @final
20 */
21 class PropertyInfoExtractor implements PropertyInfoExtractorInterface, PropertyInitializableExtractorInterface
22 {
23 private $listExtractors;
24 private $typeExtractors;
25 private $descriptionExtractors;
26 private $accessExtractors;
27 private $initializableExtractors;
28
29 /**
30 * @param iterable<mixed, PropertyListExtractorInterface> $listExtractors
31 * @param iterable<mixed, PropertyTypeExtractorInterface> $typeExtractors
32 * @param iterable<mixed, PropertyDescriptionExtractorInterface> $descriptionExtractors
33 * @param iterable<mixed, PropertyAccessExtractorInterface> $accessExtractors
34 * @param iterable<mixed, PropertyInitializableExtractorInterface> $initializableExtractors
35 */
36 public function __construct(iterable $listExtractors = [], iterable $typeExtractors = [], iterable $descriptionExtractors = [], iterable $accessExtractors = [], iterable $initializableExtractors = [])
37 {
38 $this->listExtractors = $listExtractors;
39 $this->typeExtractors = $typeExtractors;
40 $this->descriptionExtractors = $descriptionExtractors;
41 $this->accessExtractors = $accessExtractors;
42 $this->initializableExtractors = $initializableExtractors;
43 }
44
45 /**
46 * {@inheritdoc}
47 */
48 public function getProperties(string $class, array $context = []): ?array
49 {
50 return $this->extract($this->listExtractors, 'getProperties', [$class, $context]);
51 }
52
53 /**
54 * {@inheritdoc}
55 */
56 public function getShortDescription(string $class, string $property, array $context = []): ?string
57 {
58 return $this->extract($this->descriptionExtractors, 'getShortDescription', [$class, $property, $context]);
59 }
60
61 /**
62 * {@inheritdoc}
63 */
64 public function getLongDescription(string $class, string $property, array $context = []): ?string
65 {
66 return $this->extract($this->descriptionExtractors, 'getLongDescription', [$class, $property, $context]);
67 }
68
69 /**
70 * {@inheritdoc}
71 */
72 public function getTypes(string $class, string $property, array $context = []): ?array
73 {
74 return $this->extract($this->typeExtractors, 'getTypes', [$class, $property, $context]);
75 }
76
77 /**
78 * {@inheritdoc}
79 */
80 public function isReadable(string $class, string $property, array $context = []): ?bool
81 {
82 return $this->extract($this->accessExtractors, 'isReadable', [$class, $property, $context]);
83 }
84
85 /**
86 * {@inheritdoc}
87 */
88 public function isWritable(string $class, string $property, array $context = []): ?bool
89 {
90 return $this->extract($this->accessExtractors, 'isWritable', [$class, $property, $context]);
91 }
92
93 /**
94 * {@inheritdoc}
95 */
96 public function isInitializable(string $class, string $property, array $context = []): ?bool
97 {
98 return $this->extract($this->initializableExtractors, 'isInitializable', [$class, $property, $context]);
99 }
100
101 /**
102 * Iterates over registered extractors and return the first value found.
103 *
104 * @param iterable<mixed, object> $extractors
105 * @param list<mixed> $arguments
106 *
107 * @return mixed
108 */
109 private function extract(iterable $extractors, string $method, array $arguments)
110 {
111 foreach ($extractors as $extractor) {
112 if (null !== $value = $extractor->{$method}(...$arguments)) {
113 return $value;
114 }
115 }
116
117 return null;
118 }
119 }
120