diff --git a/Console/Descriptor/JsonDescriptor.php b/Console/Descriptor/JsonDescriptor.php
index 44fae86bc..53cb18910 100644
--- a/Console/Descriptor/JsonDescriptor.php
+++ b/Console/Descriptor/JsonDescriptor.php
@@ -220,7 +220,7 @@ private function getContainerDefinitionData(Definition $definition, bool $omitTa
'autoconfigure' => $definition->isAutoconfigured(),
];
- if ('' !== $classDescription = $this->getClassDescription($definition->getClass())) {
+ if ('' !== $classDescription = $this->getClassDescription((string) $definition->getClass())) {
$data['description'] = $classDescription;
}
diff --git a/Console/Descriptor/MarkdownDescriptor.php b/Console/Descriptor/MarkdownDescriptor.php
index 56e11b07f..8d6e3bddc 100644
--- a/Console/Descriptor/MarkdownDescriptor.php
+++ b/Console/Descriptor/MarkdownDescriptor.php
@@ -183,7 +183,7 @@ protected function describeContainerDefinition(Definition $definition, array $op
{
$output = '';
- if ('' !== $classDescription = $this->getClassDescription($definition->getClass())) {
+ if ('' !== $classDescription = $this->getClassDescription((string) $definition->getClass())) {
$output .= '- Description: `'.$classDescription.'`'."\n";
}
diff --git a/Console/Descriptor/TextDescriptor.php b/Console/Descriptor/TextDescriptor.php
index c0ec5e412..073920216 100644
--- a/Console/Descriptor/TextDescriptor.php
+++ b/Console/Descriptor/TextDescriptor.php
@@ -255,7 +255,7 @@ protected function describeContainerDefinition(Definition $definition, array $op
$options['output']->title(sprintf('Information for Service "%s"', $options['id']));
}
- if ('' !== $classDescription = $this->getClassDescription($definition->getClass())) {
+ if ('' !== $classDescription = $this->getClassDescription((string) $definition->getClass())) {
$options['output']->text($classDescription."\n");
}
diff --git a/Console/Descriptor/XmlDescriptor.php b/Console/Descriptor/XmlDescriptor.php
index 3e66b05d0..d35f5c609 100644
--- a/Console/Descriptor/XmlDescriptor.php
+++ b/Console/Descriptor/XmlDescriptor.php
@@ -304,7 +304,7 @@ private function getContainerDefinitionDocument(Definition $definition, string $
$serviceXML->setAttribute('id', $id);
}
- if ('' !== $classDescription = $this->getClassDescription($definition->getClass())) {
+ if ('' !== $classDescription = $this->getClassDescription((string) $definition->getClass())) {
$serviceXML->appendChild($descriptionXML = $dom->createElement('description'));
$descriptionXML->appendChild($dom->createCDATASection($classDescription));
}
diff --git a/Tests/Console/Descriptor/ObjectsProvider.php b/Tests/Console/Descriptor/ObjectsProvider.php
index caafff684..a2b8409e8 100644
--- a/Tests/Console/Descriptor/ObjectsProvider.php
+++ b/Tests/Console/Descriptor/ObjectsProvider.php
@@ -139,6 +139,7 @@ public static function getContainerDefinitions()
->addTag('tag2')
->addMethodCall('setMailer', [new Reference('mailer')])
->setFactory([new Reference('factory.service'), 'get']),
+ 'definition_without_class' => new Definition(),
];
}
diff --git a/Tests/Fixtures/Descriptor/builder_1_arguments.json b/Tests/Fixtures/Descriptor/builder_1_arguments.json
index 959b24b3f..e07b13743 100644
--- a/Tests/Fixtures/Descriptor/builder_1_arguments.json
+++ b/Tests/Fixtures/Descriptor/builder_1_arguments.json
@@ -67,6 +67,19 @@
"factory_method": "get",
"tags": []
},
+ "definition_without_class": {
+ "class": "",
+ "public": false,
+ "synthetic": false,
+ "lazy": false,
+ "shared": true,
+ "abstract": false,
+ "autowire": false,
+ "autoconfigure": false,
+ "arguments": [],
+ "file": null,
+ "tags": []
+ },
"service_container": {
"class": "Symfony\\Component\\DependencyInjection\\ContainerInterface",
"public": true,
diff --git a/Tests/Fixtures/Descriptor/builder_1_arguments.md b/Tests/Fixtures/Descriptor/builder_1_arguments.md
index efdc188d4..08676b31d 100644
--- a/Tests/Fixtures/Descriptor/builder_1_arguments.md
+++ b/Tests/Fixtures/Descriptor/builder_1_arguments.md
@@ -18,6 +18,18 @@ Definitions
- Factory Class: `Full\Qualified\FactoryClass`
- Factory Method: `get`
+### definition_without_class
+
+- Class: ``
+- Public: no
+- Synthetic: no
+- Lazy: no
+- Shared: yes
+- Abstract: no
+- Autowired: no
+- Autoconfigured: no
+- Arguments: no
+
### service_container
- Description: `ContainerInterface is the interface implemented by service container classes.`
diff --git a/Tests/Fixtures/Descriptor/builder_1_arguments.txt b/Tests/Fixtures/Descriptor/builder_1_arguments.txt
index 5ab36e2eb..74166a387 100644
--- a/Tests/Fixtures/Descriptor/builder_1_arguments.txt
+++ b/Tests/Fixtures/Descriptor/builder_1_arguments.txt
@@ -2,11 +2,12 @@
[33mSymfony Container Services[39m
[33m==========================[39m
- ------------------- ----------------------------------------------------------
- [32m Service ID [39m [32m Class name [39m
- ------------------- ----------------------------------------------------------
- alias_1 alias for "service_1"
- definition_1 Full\Qualified\Class1
- service_container Symfony\Component\DependencyInjection\ContainerInterface
- ------------------- ----------------------------------------------------------
+ -------------------------- ----------------------------------------------------------
+ [32m Service ID [39m [32m Class name [39m
+ -------------------------- ----------------------------------------------------------
+ alias_1 alias for "service_1"
+ definition_1 Full\Qualified\Class1
+ definition_without_class
+ service_container Symfony\Component\DependencyInjection\ContainerInterface
+ -------------------------- ----------------------------------------------------------
diff --git a/Tests/Fixtures/Descriptor/builder_1_arguments.xml b/Tests/Fixtures/Descriptor/builder_1_arguments.xml
index 0a6cfb44a..061bb5d6e 100644
--- a/Tests/Fixtures/Descriptor/builder_1_arguments.xml
+++ b/Tests/Fixtures/Descriptor/builder_1_arguments.xml
@@ -23,6 +23,7 @@
+
diff --git a/Tests/Fixtures/Descriptor/builder_1_public.json b/Tests/Fixtures/Descriptor/builder_1_public.json
index d96cf5995..49e18b886 100644
--- a/Tests/Fixtures/Descriptor/builder_1_public.json
+++ b/Tests/Fixtures/Descriptor/builder_1_public.json
@@ -14,6 +14,18 @@
"factory_method": "get",
"tags": []
},
+ "definition_without_class": {
+ "class": "",
+ "public": false,
+ "synthetic": false,
+ "lazy": false,
+ "shared": true,
+ "abstract": false,
+ "autowire": false,
+ "autoconfigure": false,
+ "file": null,
+ "tags": []
+ },
"service_container": {
"class": "Symfony\\Component\\DependencyInjection\\ContainerInterface",
"public": true,
diff --git a/Tests/Fixtures/Descriptor/builder_1_public.md b/Tests/Fixtures/Descriptor/builder_1_public.md
index cf8aec87e..be23f839b 100644
--- a/Tests/Fixtures/Descriptor/builder_1_public.md
+++ b/Tests/Fixtures/Descriptor/builder_1_public.md
@@ -17,6 +17,17 @@ Definitions
- Factory Class: `Full\Qualified\FactoryClass`
- Factory Method: `get`
+### definition_without_class
+
+- Class: ``
+- Public: no
+- Synthetic: no
+- Lazy: no
+- Shared: yes
+- Abstract: no
+- Autowired: no
+- Autoconfigured: no
+
### service_container
- Description: `ContainerInterface is the interface implemented by service container classes.`
diff --git a/Tests/Fixtures/Descriptor/builder_1_public.txt b/Tests/Fixtures/Descriptor/builder_1_public.txt
index 5ab36e2eb..74166a387 100644
--- a/Tests/Fixtures/Descriptor/builder_1_public.txt
+++ b/Tests/Fixtures/Descriptor/builder_1_public.txt
@@ -2,11 +2,12 @@
[33mSymfony Container Services[39m
[33m==========================[39m
- ------------------- ----------------------------------------------------------
- [32m Service ID [39m [32m Class name [39m
- ------------------- ----------------------------------------------------------
- alias_1 alias for "service_1"
- definition_1 Full\Qualified\Class1
- service_container Symfony\Component\DependencyInjection\ContainerInterface
- ------------------- ----------------------------------------------------------
+ -------------------------- ----------------------------------------------------------
+ [32m Service ID [39m [32m Class name [39m
+ -------------------------- ----------------------------------------------------------
+ alias_1 alias for "service_1"
+ definition_1 Full\Qualified\Class1
+ definition_without_class
+ service_container Symfony\Component\DependencyInjection\ContainerInterface
+ -------------------------- ----------------------------------------------------------
diff --git a/Tests/Fixtures/Descriptor/builder_1_public.xml b/Tests/Fixtures/Descriptor/builder_1_public.xml
index b6f630271..05f83391f 100644
--- a/Tests/Fixtures/Descriptor/builder_1_public.xml
+++ b/Tests/Fixtures/Descriptor/builder_1_public.xml
@@ -4,6 +4,7 @@
+
diff --git a/Tests/Fixtures/Descriptor/definition_arguments_without_class.json b/Tests/Fixtures/Descriptor/definition_arguments_without_class.json
new file mode 100644
index 000000000..90a6b5dec
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_arguments_without_class.json
@@ -0,0 +1,13 @@
+{
+ "class": "",
+ "public": false,
+ "synthetic": false,
+ "lazy": false,
+ "shared": true,
+ "abstract": false,
+ "autowire": false,
+ "autoconfigure": false,
+ "arguments": [],
+ "file": null,
+ "tags": []
+}
diff --git a/Tests/Fixtures/Descriptor/definition_arguments_without_class.md b/Tests/Fixtures/Descriptor/definition_arguments_without_class.md
new file mode 100644
index 000000000..217c965b6
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_arguments_without_class.md
@@ -0,0 +1,9 @@
+- Class: ``
+- Public: no
+- Synthetic: no
+- Lazy: no
+- Shared: yes
+- Abstract: no
+- Autowired: no
+- Autoconfigured: no
+- Arguments: no
diff --git a/Tests/Fixtures/Descriptor/definition_arguments_without_class.txt b/Tests/Fixtures/Descriptor/definition_arguments_without_class.txt
new file mode 100644
index 000000000..ed4957903
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_arguments_without_class.txt
@@ -0,0 +1,15 @@
+ ---------------- -------
+ [32m Option [39m [32m Value [39m
+ ---------------- -------
+ Service ID -
+ Class -
+ Tags -
+ Public no
+ Synthetic no
+ Lazy no
+ Shared yes
+ Abstract no
+ Autowired no
+ Autoconfigured no
+ ---------------- -------
+
diff --git a/Tests/Fixtures/Descriptor/definition_arguments_without_class.xml b/Tests/Fixtures/Descriptor/definition_arguments_without_class.xml
new file mode 100644
index 000000000..ee6df8928
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_arguments_without_class.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/Tests/Fixtures/Descriptor/definition_without_class.json b/Tests/Fixtures/Descriptor/definition_without_class.json
new file mode 100644
index 000000000..eda84251b
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_without_class.json
@@ -0,0 +1,12 @@
+{
+ "class": "",
+ "public": false,
+ "synthetic": false,
+ "lazy": false,
+ "shared": true,
+ "abstract": false,
+ "autowire": false,
+ "autoconfigure": false,
+ "file": null,
+ "tags": []
+}
diff --git a/Tests/Fixtures/Descriptor/definition_without_class.md b/Tests/Fixtures/Descriptor/definition_without_class.md
new file mode 100644
index 000000000..ca50a70f7
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_without_class.md
@@ -0,0 +1,8 @@
+- Class: ``
+- Public: no
+- Synthetic: no
+- Lazy: no
+- Shared: yes
+- Abstract: no
+- Autowired: no
+- Autoconfigured: no
diff --git a/Tests/Fixtures/Descriptor/definition_without_class.txt b/Tests/Fixtures/Descriptor/definition_without_class.txt
new file mode 100644
index 000000000..ed4957903
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_without_class.txt
@@ -0,0 +1,15 @@
+ ---------------- -------
+ [32m Option [39m [32m Value [39m
+ ---------------- -------
+ Service ID -
+ Class -
+ Tags -
+ Public no
+ Synthetic no
+ Lazy no
+ Shared yes
+ Abstract no
+ Autowired no
+ Autoconfigured no
+ ---------------- -------
+
diff --git a/Tests/Fixtures/Descriptor/definition_without_class.xml b/Tests/Fixtures/Descriptor/definition_without_class.xml
new file mode 100644
index 000000000..ee6df8928
--- /dev/null
+++ b/Tests/Fixtures/Descriptor/definition_without_class.xml
@@ -0,0 +1,2 @@
+
+