bug #39692 [FrameworkBundle] Dump abstract arguments (jderusse)

This PR was merged into the 5.1 branch.

Discussion
----------

[FrameworkBundle] Dump abstract arguments

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #24138
| License       | MIT
| Doc PR        | -

This PR fixes n exception thrown when dumping abstract arguments (ie. `./bin/console  debug:containter session.abstract_handler --show-arguments`)

Commits
-------

df769ec84c Dump abstract arguments
This commit is contained in:
Fabien Potencier 2021-01-04 08:57:52 +01:00
commit b76d5608cf
9 changed files with 50 additions and 25 deletions

View File

@ -14,6 +14,7 @@ namespace Symfony\Bundle\FrameworkBundle\Console\Descriptor;
use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\Argument\AbstractArgument;
use Symfony\Component\DependencyInjection\Argument\ArgumentInterface;
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\ContainerBuilder;
@ -393,6 +394,10 @@ class JsonDescriptor extends Descriptor
];
}
if ($value instanceof AbstractArgument) {
return ['type' => 'abstract', 'text' => $value->getText()];
}
if ($value instanceof ArgumentInterface) {
return $this->describeValue($value->getValues(), $omitTags, $showArguments);
}

View File

@ -16,6 +16,7 @@ use Symfony\Component\Console\Helper\Dumper;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\Argument\AbstractArgument;
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
@ -347,6 +348,8 @@ class TextDescriptor extends Descriptor
$argumentsInformation[] = sprintf('Service locator (%d element(s))', \count($argument->getValues()));
} elseif ($argument instanceof Definition) {
$argumentsInformation[] = 'Inlined Service';
} elseif ($argument instanceof AbstractArgument) {
$argumentsInformation[] = sprintf('Abstract argument (%s)', $argument->getText());
} else {
$argumentsInformation[] = \is_array($argument) ? sprintf('Array (%d element(s))', \count($argument)) : $argument;
}

View File

@ -14,6 +14,7 @@ namespace Symfony\Bundle\FrameworkBundle\Console\Descriptor;
use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\Argument\AbstractArgument;
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
@ -409,6 +410,9 @@ class XmlDescriptor extends Descriptor
}
} elseif ($argument instanceof Definition) {
$argumentXML->appendChild($dom->importNode($this->getContainerDefinitionDocument($argument, null, false, true)->childNodes->item(0), true));
} elseif ($argument instanceof AbstractArgument) {
$argumentXML->setAttribute('type', 'abstract');
$argumentXML->appendChild(new \DOMText($argument->getText()));
} elseif (\is_array($argument)) {
$argumentXML->setAttribute('type', 'collection');

View File

@ -12,6 +12,7 @@
namespace Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\Argument\AbstractArgument;
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
@ -144,6 +145,7 @@ class ObjectsProvider
new Reference('definition_1'),
new Reference('.definition_2'),
]))
->addArgument(new AbstractArgument('placeholder'))
->setFactory(['Full\\Qualified\\FactoryClass', 'get']),
'.definition_2' => $definition2
->setPublic(false)

View File

@ -60,7 +60,11 @@
"type": "service",
"id": ".definition_2"
}
]
],
{
"type": "abstract",
"text": "placeholder"
}
],
"file": null,
"factory_class": "Full\\Qualified\\FactoryClass",

View File

@ -22,6 +22,7 @@
<argument type="service" id="definition_1"/>
<argument type="service" id=".definition_2"/>
</argument>
<argument type="abstract">placeholder</argument>
</definition>
<definition id="definition_without_class" class="" public="false" synthetic="false" lazy="false" shared="true" abstract="false" autowired="false" autoconfigured="false" file=""/>
<definition id="service_container" class="Symfony\Component\DependencyInjection\ContainerInterface" public="true" synthetic="true" lazy="false" shared="true" abstract="false" autowired="false" autoconfigured="false" file="">

View File

@ -58,7 +58,11 @@
"type": "service",
"id": ".definition_2"
}
]
],
{
"type": "abstract",
"text": "placeholder"
}
],
"file": null,
"factory_class": "Full\\Qualified\\FactoryClass",

View File

@ -1,24 +1,25 @@
---------------- -----------------------------
 Option   Value 
---------------- -----------------------------
Service ID -
Class Full\Qualified\Class1
Tags -
Public yes
Synthetic no
Lazy yes
Shared yes
Abstract yes
Autowired no
Autoconfigured no
Factory Class Full\Qualified\FactoryClass
Factory Method get
 Arguments Service(.definition_2) 
 %parameter% 
 Inlined Service 
 Array (3 element(s)) 
 Iterator (2 element(s)) 
 - Service(definition_1) 
 - Service(.definition_2)
---------------- -----------------------------
---------------- ---------------------------------
 Option   Value 
---------------- ---------------------------------
Service ID -
Class Full\Qualified\Class1
Tags -
Public yes
Synthetic no
Lazy yes
Shared yes
Abstract yes
Autowired no
Autoconfigured no
Factory Class Full\Qualified\FactoryClass
Factory Method get
 Arguments Service(.definition_2) 
 %parameter% 
 Inlined Service 
 Array (3 element(s)) 
 Iterator (2 element(s)) 
 - Service(definition_1) 
 - Service(.definition_2) 
 Abstract argument (placeholder)
---------------- ---------------------------------

View File

@ -20,4 +20,5 @@
<argument type="service" id="definition_1"/>
<argument type="service" id=".definition_2"/>
</argument>
<argument type="abstract">placeholder</argument>
</definition>