Skip to content

Commit 1cd3ab8

Browse files
committed
Add & use OptionResolverIntrospector
1 parent ef009d5 commit 1cd3ab8

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

Console/Descriptor/Descriptor.php

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
use Symfony\Component\Console\Style\SymfonyStyle;
1919
use Symfony\Component\Form\ResolvedFormTypeInterface;
2020
use Symfony\Component\Form\Util\OptionsResolverWrapper;
21+
use Symfony\Component\OptionsResolver\Debug\OptionsResolverIntrospector;
22+
use Symfony\Component\OptionsResolver\Exception\NoConfigurationException;
2123
use Symfony\Component\OptionsResolver\OptionsResolver;
2224

2325
/**
@@ -104,20 +106,25 @@ protected function collectOptions(ResolvedFormTypeInterface $type)
104106

105107
protected function getOptionDefinition(OptionsResolver $optionsResolver, $option)
106108
{
107-
$refObject = new \ReflectionObject($optionsResolver);
108-
foreach (array('defaults', 'lazy', 'allowedTypes', 'allowedValues', 'normalizers') as $name) {
109-
$property = $refObject->getProperty($name);
110-
$property->setAccessible(true);
111-
$value = $property->getValue($optionsResolver);
112-
if (array_key_exists($option, $value)) {
113-
$definition[$name] = $value[$option];
109+
$definition = array('required' => $optionsResolver->isRequired($option));
110+
111+
$introspector = new OptionsResolverIntrospector($optionsResolver);
112+
113+
$map = array(
114+
'default' => 'getDefault',
115+
'lazy' => 'getLazyClosures',
116+
'allowedTypes' => 'getAllowedTypes',
117+
'allowedValues' => 'getAllowedValues',
118+
'normalizer' => 'getNormalizer',
119+
);
120+
121+
foreach ($map as $key => $method) {
122+
try {
123+
$definition[$key] = $introspector->{$method}($option);
124+
} catch (NoConfigurationException $e) {
125+
// noop
114126
}
115127
}
116-
$definition['required'] = $optionsResolver->isRequired($option);
117-
118-
if (isset($definition['lazy']) && 1 === count($definition['lazy'])) {
119-
$definition['lazy'] = $definition['lazy'][0];
120-
}
121128

122129
return $definition;
123130
}

Console/Descriptor/JsonDescriptor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,20 @@ protected function describeOption(OptionsResolver $optionsResolver, array $optio
6161

6262
$map = array(
6363
'required' => 'required',
64-
'default' => 'defaults',
64+
'default' => 'default',
6565
'allowed_types' => 'allowedTypes',
6666
'allowed_values' => 'allowedValues',
6767
);
6868
foreach ($map as $label => $name) {
6969
if (array_key_exists($name, $definition)) {
7070
$data[$label] = $definition[$name];
7171

72-
if ('defaults' === $name) {
72+
if ('default' === $name) {
7373
$data['is_lazy'] = isset($definition['lazy']);
7474
}
7575
}
7676
}
77-
$data['has_normalizer'] = isset($definition['normalizers']);
77+
$data['has_normalizer'] = isset($definition['normalizer']);
7878

7979
$this->writeData($data, $options);
8080
}

Console/Descriptor/TextDescriptor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,15 @@ protected function describeOption(OptionsResolver $optionsResolver, array $optio
103103
$dump = $this->getDumpFunction();
104104
$map = array(
105105
'Required' => 'required',
106-
'Default' => 'defaults',
106+
'Default' => 'default',
107107
'Allowed types' => 'allowedTypes',
108108
'Allowed values' => 'allowedValues',
109-
'Normalizer' => 'normalizers',
109+
'Normalizer' => 'normalizer',
110110
);
111111
$rows = array();
112112
foreach ($map as $label => $name) {
113113
$value = array_key_exists($name, $definition) ? $dump($definition[$name]) : '-';
114-
if ('defaults' === $name && isset($definition['lazy'])) {
114+
if ('default' === $name && isset($definition['lazy'])) {
115115
$value = "Value: $value\n\nClosure(s): ".$dump($definition['lazy']);
116116
}
117117

0 commit comments

Comments
 (0)