diff --git a/Compiler/MergeExtensionConfigurationPass.php b/Compiler/MergeExtensionConfigurationPass.php index c64381886..c182d7cda 100644 --- a/Compiler/MergeExtensionConfigurationPass.php +++ b/Compiler/MergeExtensionConfigurationPass.php @@ -79,10 +79,6 @@ public function process(ContainerBuilder $container) $container->getParameterBag()->mergeEnvPlaceholders($resolvingBag); } - if ($configAvailable) { - BaseNode::resetPlaceholders(); - } - throw $e; } @@ -95,10 +91,6 @@ public function process(ContainerBuilder $container) $container->getParameterBag()->add($parameters); } - if ($configAvailable) { - BaseNode::resetPlaceholders(); - } - $container->addDefinitions($definitions); $container->addAliases($aliases); } diff --git a/Compiler/ValidateEnvPlaceholdersPass.php b/Compiler/ValidateEnvPlaceholdersPass.php index 1a397f209..510e90093 100644 --- a/Compiler/ValidateEnvPlaceholdersPass.php +++ b/Compiler/ValidateEnvPlaceholdersPass.php @@ -48,46 +48,42 @@ public function process(ContainerBuilder $container) $defaultBag = new ParameterBag($resolvingBag->all()); $envTypes = $resolvingBag->getProvidedTypes(); - try { - foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { - $values = []; - if (false === $i = strpos($env, ':')) { - $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : self::TYPE_FIXTURES['string']; - $defaultType = null !== $default ? get_debug_type($default) : 'string'; - $values[$defaultType] = $default; - } else { - $prefix = substr($env, 0, $i); - foreach ($envTypes[$prefix] ?? ['string'] as $type) { - $values[$type] = self::TYPE_FIXTURES[$type] ?? null; - } - } - foreach ($placeholders as $placeholder) { - BaseNode::setPlaceholder($placeholder, $values); + foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { + $values = []; + if (false === $i = strpos($env, ':')) { + $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : self::TYPE_FIXTURES['string']; + $defaultType = null !== $default ? get_debug_type($default) : 'string'; + $values[$defaultType] = $default; + } else { + $prefix = substr($env, 0, $i); + foreach ($envTypes[$prefix] ?? ['string'] as $type) { + $values[$type] = self::TYPE_FIXTURES[$type] ?? null; } } + foreach ($placeholders as $placeholder) { + BaseNode::setPlaceholder($placeholder, $values); + } + } - $processor = new Processor(); - - foreach ($extensions as $name => $extension) { - if (!($extension instanceof ConfigurationExtensionInterface || $extension instanceof ConfigurationInterface) - || !$config = array_filter($container->getExtensionConfig($name)) - ) { - // this extension has no semantic configuration or was not called - continue; - } + $processor = new Processor(); - $config = $resolvingBag->resolveValue($config); + foreach ($extensions as $name => $extension) { + if (!($extension instanceof ConfigurationExtensionInterface || $extension instanceof ConfigurationInterface) + || !$config = array_filter($container->getExtensionConfig($name)) + ) { + // this extension has no semantic configuration or was not called + continue; + } - if ($extension instanceof ConfigurationInterface) { - $configuration = $extension; - } elseif (null === $configuration = $extension->getConfiguration($config, $container)) { - continue; - } + $config = $resolvingBag->resolveValue($config); - $this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config); + if ($extension instanceof ConfigurationInterface) { + $configuration = $extension; + } elseif (null === $configuration = $extension->getConfiguration($config, $container)) { + continue; } - } finally { - BaseNode::resetPlaceholders(); + + $this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config); } $resolvingBag->clearUnusedEnvPlaceholders(); diff --git a/Container.php b/Container.php index 0532120ad..fc38cd93a 100644 --- a/Container.php +++ b/Container.php @@ -103,7 +103,7 @@ public function getParameterBag(): ParameterBagInterface /** * Gets a parameter. * - * @return array|bool|string|int|float|null + * @return array|bool|string|int|float|\UnitEnum|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -117,7 +117,7 @@ public function hasParameter(string $name): bool return $this->parameterBag->has($name); } - public function setParameter(string $name, array|bool|string|int|float|null $value) + public function setParameter(string $name, array|bool|string|int|float|\UnitEnum|null $value) { $this->parameterBag->set($name, $value); } diff --git a/ContainerInterface.php b/ContainerInterface.php index aa5d6b317..cad44026c 100644 --- a/ContainerInterface.php +++ b/ContainerInterface.php @@ -48,7 +48,7 @@ public function has(string $id): bool; public function initialized(string $id): bool; /** - * @return array|bool|string|int|float|null + * @return array|bool|string|int|float|\UnitEnum|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -56,5 +56,5 @@ public function getParameter(string $name); public function hasParameter(string $name): bool; - public function setParameter(string $name, array|bool|string|int|float|null $value); + public function setParameter(string $name, array|bool|string|int|float|\UnitEnum|null $value); } diff --git a/Dumper/PhpDumper.php b/Dumper/PhpDumper.php index ddb9b195a..3f50561a5 100644 --- a/Dumper/PhpDumper.php +++ b/Dumper/PhpDumper.php @@ -334,7 +334,7 @@ class %s extends {$options['class']} if (!$class || str_contains($class, '$') || \in_array($class, ['int', 'float', 'string', 'bool', 'resource', 'object', 'array', 'null', 'callable', 'iterable', 'mixed', 'void'], true)) { continue; } - if (!(class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false)) || (new \ReflectionClass($class))->isUserDefined()) { + if (!(class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false)) || ((new \ReflectionClass($class))->isUserDefined() && !\in_array($class, ['Attribute', 'JsonException', 'ReturnTypeWillChange', 'Stringable', 'UnhandledMatchError', 'ValueError'], true))) { $code[$options['class'].'.preload.php'] .= sprintf("\$classes[] = '%s';\n", $class); } } @@ -1491,10 +1491,11 @@ private function addDefaultParametersMethod(): string if ($key !== $resolvedKey = $this->container->resolveEnvPlaceholders($key)) { throw new InvalidArgumentException(sprintf('Parameter name cannot use env parameters: "%s".', $resolvedKey)); } - $export = $this->exportParameters([$value]); + $hasEnum = false; + $export = $this->exportParameters([$value], '', 12, $hasEnum); $export = explode('0 => ', substr(rtrim($export, " ]\n"), 2, -1), 2); - if (preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $export[1])) { + if ($hasEnum || preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $export[1])) { $dynamicPhp[$key] = sprintf('%scase %s: $value = %s; break;', $export[0], $this->export($key), $export[1]); } else { $php[] = sprintf('%s%s => %s,', $export[0], $this->export($key), $export[1]); @@ -1504,7 +1505,7 @@ private function addDefaultParametersMethod(): string $code = <<<'EOF' - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (isset($this->buildParameters[$name])) { return $this->buildParameters[$name]; @@ -1595,12 +1596,12 @@ protected function getDefaultParameters(): array /** * @throws InvalidArgumentException */ - private function exportParameters(array $parameters, string $path = '', int $indent = 12): string + private function exportParameters(array $parameters, string $path = '', int $indent = 12, bool &$hasEnum = false): string { $php = []; foreach ($parameters as $key => $value) { if (\is_array($value)) { - $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4); + $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4, $hasEnum); } elseif ($value instanceof ArgumentInterface) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain special arguments. "%s" found in "%s".', get_debug_type($value), $path.'/'.$key)); } elseif ($value instanceof Variable) { @@ -1611,6 +1612,9 @@ private function exportParameters(array $parameters, string $path = '', int $ind throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain references to other services (reference to service "%s" found in "%s").', $value, $path.'/'.$key)); } elseif ($value instanceof Expression) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain expressions. Expression "%s" found in "%s".', $value, $path.'/'.$key)); + } elseif ($value instanceof \UnitEnum) { + $hasEnum = true; + $value = sprintf('\%s::%s', \get_class($value), $value->name); } else { $value = $this->export($value); } diff --git a/Loader/Configurator/ParametersConfigurator.php b/Loader/Configurator/ParametersConfigurator.php index d3e9fd9e7..302255b04 100644 --- a/Loader/Configurator/ParametersConfigurator.php +++ b/Loader/Configurator/ParametersConfigurator.php @@ -12,6 +12,8 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\ExpressionLanguage\Expression; /** * @author Nicolas Grekas @@ -32,6 +34,10 @@ public function __construct(ContainerBuilder $container) */ final public function set(string $name, mixed $value): static { + if ($value instanceof Expression) { + throw new InvalidArgumentException(sprintf('Using an expression in parameter "%s" is not allowed.', $name)); + } + $this->container->setParameter($name, static::processValue($value, true)); return $this; diff --git a/Loader/YamlFileLoader.php b/Loader/YamlFileLoader.php index 2c7f41364..8d7c3ab6e 100644 --- a/Loader/YamlFileLoader.php +++ b/Loader/YamlFileLoader.php @@ -883,6 +883,10 @@ private function resolveServices(mixed $value, string $file, bool $isParameter = $value[$k] = $this->resolveServices($v, $file, $isParameter); } } elseif (\is_string($value) && str_starts_with($value, '@=')) { + if ($isParameter) { + throw new InvalidArgumentException(sprintf('Using expressions in parameters is not allowed in "%s".', $file)); + } + if (!class_exists(Expression::class)) { throw new \LogicException('The "@=" expression syntax cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".'); } diff --git a/ParameterBag/ContainerBag.php b/ParameterBag/ContainerBag.php index d6559d894..ec5876f50 100644 --- a/ParameterBag/ContainerBag.php +++ b/ParameterBag/ContainerBag.php @@ -36,7 +36,7 @@ public function all(): array /** * {@inheritdoc} */ - public function get(string $name): array|bool|string|int|float|null + public function get(string $name): array|bool|string|int|float|\UnitEnum|null { return $this->container->getParameter($name); } diff --git a/ParameterBag/FrozenParameterBag.php b/ParameterBag/FrozenParameterBag.php index 0e57d3379..2a617ffd8 100644 --- a/ParameterBag/FrozenParameterBag.php +++ b/ParameterBag/FrozenParameterBag.php @@ -53,7 +53,7 @@ public function add(array $parameters) /** * {@inheritdoc} */ - public function set(string $name, array|bool|string|int|float|null $value) + public function set(string $name, array|bool|string|int|float|\UnitEnum|null $value) { throw new LogicException('Impossible to call set() on a frozen ParameterBag.'); } diff --git a/ParameterBag/ParameterBag.php b/ParameterBag/ParameterBag.php index c29a5ce0c..bfeee834d 100644 --- a/ParameterBag/ParameterBag.php +++ b/ParameterBag/ParameterBag.php @@ -59,7 +59,7 @@ public function all(): array /** * {@inheritdoc} */ - public function get(string $name): array|bool|string|int|float|null + public function get(string $name): array|bool|string|int|float|\UnitEnum|null { if (!\array_key_exists($name, $this->parameters)) { if (!$name) { @@ -99,7 +99,7 @@ public function get(string $name): array|bool|string|int|float|null /** * {@inheritdoc} */ - public function set(string $name, array|bool|string|int|float|null $value) + public function set(string $name, array|bool|string|int|float|\UnitEnum|null $value) { $this->parameters[$name] = $value; } diff --git a/ParameterBag/ParameterBagInterface.php b/ParameterBag/ParameterBagInterface.php index 7e276fd8f..0ac3323ff 100644 --- a/ParameterBag/ParameterBagInterface.php +++ b/ParameterBag/ParameterBagInterface.php @@ -45,7 +45,7 @@ public function all(): array; * * @throws ParameterNotFoundException if the parameter is not defined */ - public function get(string $name): array|bool|string|int|float|null; + public function get(string $name): array|bool|string|int|float|\UnitEnum|null; /** * Removes a parameter. @@ -57,7 +57,7 @@ public function remove(string $name); * * @throws LogicException if the parameter cannot be set */ - public function set(string $name, array|bool|string|int|float|null $value); + public function set(string $name, array|bool|string|int|float|\UnitEnum|null $value); /** * Returns true if a parameter name is defined. diff --git a/Tests/Dumper/PhpDumperTest.php b/Tests/Dumper/PhpDumperTest.php index 209079fc7..fbcf4459c 100644 --- a/Tests/Dumper/PhpDumperTest.php +++ b/Tests/Dumper/PhpDumperTest.php @@ -24,6 +24,7 @@ use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\PassConfig; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface as SymfonyContainerInterface; use Symfony\Component\DependencyInjection\Definition; @@ -1219,16 +1220,37 @@ public function testDumpHandlesEnumeration() ->setPublic(true) ->addArgument(FooUnitEnum::BAR); + $container->setParameter('unit_enum', FooUnitEnum::BAR); + $container->setParameter('enum_array', [FooUnitEnum::BAR, FooUnitEnum::FOO]); $container->compile(); $dumper = new PhpDumper($container); - eval('?>'.$dumper->dump([ + eval('?>'.$dumpedContainer = $dumper->dump([ 'class' => 'Symfony_DI_PhpDumper_Test_Enumeration', ])); + /** @var Container $container */ $container = new \Symfony_DI_PhpDumper_Test_Enumeration(); $this->assertSame(FooUnitEnum::BAR, $container->get('foo')->getBar()); + $this->assertSame(FooUnitEnum::BAR, $container->getParameter('unit_enum')); + $this->assertSame([FooUnitEnum::BAR, FooUnitEnum::FOO], $container->getParameter('enum_array')); + $this->assertStringMatchesFormat(<<<'PHP' +%A + private function getDynamicParameter(string $name) + { + switch ($name) { + case 'unit_enum': $value = \Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR; break; + case 'enum_array': $value = [ + 0 => \Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR, + 1 => \Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::FOO, + ]; break; + default: throw new InvalidArgumentException(sprintf('The dynamic parameter "%s" must be defined.', $name)); + } +%A +PHP + , $dumpedContainer + ); } public function testUninitializedSyntheticReference() diff --git a/Tests/Dumper/XmlDumperTest.php b/Tests/Dumper/XmlDumperTest.php index 067db14e9..deca0a196 100644 --- a/Tests/Dumper/XmlDumperTest.php +++ b/Tests/Dumper/XmlDumperTest.php @@ -49,13 +49,6 @@ public function testExportParameters() $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services8.xml', $dumper->dump(), '->dump() dumps parameters'); } - public function testAddParameters() - { - $container = include self::$fixturesPath.'//containers/container8.php'; - $dumper = new XmlDumper($container); - $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services8.xml', $dumper->dump(), '->dump() dumps parameters'); - } - public function testAddService() { $container = include self::$fixturesPath.'/containers/container9.php'; @@ -255,6 +248,9 @@ public function testDumpHandlesEnumeration() ->setPublic(true) ->addArgument(FooUnitEnum::BAR); + $container->setParameter('unit_enum', FooUnitEnum::BAR); + $container->setParameter('enum_array', [FooUnitEnum::BAR, FooUnitEnum::FOO]); + $container->compile(); $dumper = new XmlDumper($container); diff --git a/Tests/Dumper/YamlDumperTest.php b/Tests/Dumper/YamlDumperTest.php index 0fed70bb0..1bfd222ed 100644 --- a/Tests/Dumper/YamlDumperTest.php +++ b/Tests/Dumper/YamlDumperTest.php @@ -144,6 +144,9 @@ public function testDumpHandlesEnumeration() ->setPublic(true) ->addArgument(FooUnitEnum::BAR); + $container->setParameter('unit_enum', FooUnitEnum::BAR); + $container->setParameter('enum_array', [FooUnitEnum::BAR, FooUnitEnum::FOO]); + $container->compile(); $dumper = new YamlDumper($container); diff --git a/Tests/Fixtures/FooUnitEnum.php b/Tests/Fixtures/FooUnitEnum.php index d51cf9c99..e6ce96391 100644 --- a/Tests/Fixtures/FooUnitEnum.php +++ b/Tests/Fixtures/FooUnitEnum.php @@ -5,4 +5,5 @@ enum FooUnitEnum { case BAR; + case FOO; } diff --git a/Tests/Fixtures/php/services10.php b/Tests/Fixtures/php/services10.php index c0d747a7a..41ac6df9c 100644 --- a/Tests/Fixtures/php/services10.php +++ b/Tests/Fixtures/php/services10.php @@ -48,7 +48,7 @@ protected function getTestService() return $this->services['test'] = new \stdClass(['only dot' => '.', 'concatenation as value' => '.\'\'.', 'concatenation from the start value' => '\'\'.', '.' => 'dot as a key', '.\'\'.' => 'concatenation as a key', '\'\'.' => 'concatenation from the start key', 'optimize concatenation' => 'string1-string2', 'optimize concatenation with empty string' => 'string1string2', 'optimize concatenation from the start' => 'start', 'optimize concatenation at the end' => 'end', 'new line' => 'string with '."\n".'new line']); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services12.php b/Tests/Fixtures/php/services12.php index ffa52cb3c..275f553df 100644 --- a/Tests/Fixtures/php/services12.php +++ b/Tests/Fixtures/php/services12.php @@ -48,7 +48,7 @@ protected function getTestService() return $this->services['test'] = new \stdClass(('file://'.\dirname(__DIR__, 1)), [('file://'.\dirname(__DIR__, 1)) => (\dirname(__DIR__, 2).'/')]); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services19.php b/Tests/Fixtures/php/services19.php index 0c6fb392d..038ed1460 100644 --- a/Tests/Fixtures/php/services19.php +++ b/Tests/Fixtures/php/services19.php @@ -63,7 +63,7 @@ protected function getServiceWithMethodCallAndFactoryService() return $instance; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services26.php b/Tests/Fixtures/php/services26.php index 3e98b3507..4ae8d63c7 100644 --- a/Tests/Fixtures/php/services26.php +++ b/Tests/Fixtures/php/services26.php @@ -59,7 +59,7 @@ protected function getTestService() return $this->services['test'] = new ${($_ = $this->getEnv('FOO')) && false ?: "_"}($this->getEnv('Bar'), 'foo'.$this->getEnv('string:FOO').'baz', $this->getEnv('int:Baz')); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services8.php b/Tests/Fixtures/php/services8.php index 1946a9e52..a2928c29f 100644 --- a/Tests/Fixtures/php/services8.php +++ b/Tests/Fixtures/php/services8.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services9_as_files.txt b/Tests/Fixtures/php/services9_as_files.txt index 3f93e3037..e91f08f4f 100644 --- a/Tests/Fixtures/php/services9_as_files.txt +++ b/Tests/Fixtures/php/services9_as_files.txt @@ -821,7 +821,7 @@ class ProjectServiceContainer extends Container return $instance; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (isset($this->buildParameters[$name])) { return $this->buildParameters[$name]; diff --git a/Tests/Fixtures/php/services9_compiled.php b/Tests/Fixtures/php/services9_compiled.php index 3ec66320c..9e09743da 100644 --- a/Tests/Fixtures/php/services9_compiled.php +++ b/Tests/Fixtures/php/services9_compiled.php @@ -419,7 +419,7 @@ protected function getFactorySimpleService() return new \SimpleFactoryClass('foo'); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services9_inlined_factories.txt b/Tests/Fixtures/php/services9_inlined_factories.txt index eb6347e19..2447367de 100644 --- a/Tests/Fixtures/php/services9_inlined_factories.txt +++ b/Tests/Fixtures/php/services9_inlined_factories.txt @@ -474,7 +474,7 @@ class ProjectServiceContainer extends Container return new \SimpleFactoryClass('foo'); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (isset($this->buildParameters[$name])) { return $this->buildParameters[$name]; diff --git a/Tests/Fixtures/php/services9_lazy_inlined_factories.txt b/Tests/Fixtures/php/services9_lazy_inlined_factories.txt index 822240560..c3487ac0c 100644 --- a/Tests/Fixtures/php/services9_lazy_inlined_factories.txt +++ b/Tests/Fixtures/php/services9_lazy_inlined_factories.txt @@ -94,7 +94,7 @@ class ProjectServiceContainer extends Container return new \Bar\FooClass(new \Bar\FooLazyClass()); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (isset($this->buildParameters[$name])) { return $this->buildParameters[$name]; diff --git a/Tests/Fixtures/php/services_array_params.php b/Tests/Fixtures/php/services_array_params.php index 8bab13be9..3295d21ce 100644 --- a/Tests/Fixtures/php/services_array_params.php +++ b/Tests/Fixtures/php/services_array_params.php @@ -52,7 +52,7 @@ protected function getBarService() return $instance; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_base64_env.php b/Tests/Fixtures/php/services_base64_env.php index c5e3f258a..cee2a435a 100644 --- a/Tests/Fixtures/php/services_base64_env.php +++ b/Tests/Fixtures/php/services_base64_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_csv_env.php b/Tests/Fixtures/php/services_csv_env.php index 11d11c8d6..054fe1ea8 100644 --- a/Tests/Fixtures/php/services_csv_env.php +++ b/Tests/Fixtures/php/services_csv_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_default_env.php b/Tests/Fixtures/php/services_default_env.php index 0448e7b21..82044d62d 100644 --- a/Tests/Fixtures/php/services_default_env.php +++ b/Tests/Fixtures/php/services_default_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_env_in_id.php b/Tests/Fixtures/php/services_env_in_id.php index dd4b93499..e8f3ddb8e 100644 --- a/Tests/Fixtures/php/services_env_in_id.php +++ b/Tests/Fixtures/php/services_env_in_id.php @@ -67,7 +67,7 @@ protected function getFooService() return $this->services['foo'] = new \stdClass(($this->privates['bar_%env(BAR)%'] ?? ($this->privates['bar_%env(BAR)%'] = new \stdClass())), ['baz_'.$this->getEnv('string:BAR') => new \stdClass()]); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_errored_definition.php b/Tests/Fixtures/php/services_errored_definition.php index 4b21be584..621a04c9e 100644 --- a/Tests/Fixtures/php/services_errored_definition.php +++ b/Tests/Fixtures/php/services_errored_definition.php @@ -419,7 +419,7 @@ protected function getFactorySimpleService() return new \SimpleFactoryClass('foo'); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_inline_requires.php b/Tests/Fixtures/php/services_inline_requires.php index 8271065a5..50f874d8f 100644 --- a/Tests/Fixtures/php/services_inline_requires.php +++ b/Tests/Fixtures/php/services_inline_requires.php @@ -87,7 +87,7 @@ protected function getC2Service() return $this->services['Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C2'] = new \Symfony\Component\DependencyInjection\Tests\Fixtures\includes\HotPath\C2(new \Symfony\Component\DependencyInjection\Tests\Fixtures\includes\HotPath\C3()); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_json_env.php b/Tests/Fixtures/php/services_json_env.php index 82057518e..ef9b95f2e 100644 --- a/Tests/Fixtures/php/services_json_env.php +++ b/Tests/Fixtures/php/services_json_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_query_string_env.php b/Tests/Fixtures/php/services_query_string_env.php index 83e8d7bc6..6d147b930 100644 --- a/Tests/Fixtures/php/services_query_string_env.php +++ b/Tests/Fixtures/php/services_query_string_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_rot13_env.php b/Tests/Fixtures/php/services_rot13_env.php index 27c2a5795..a17f9ed56 100644 --- a/Tests/Fixtures/php/services_rot13_env.php +++ b/Tests/Fixtures/php/services_rot13_env.php @@ -72,7 +72,7 @@ protected function getContainer_EnvVarProcessorsLocatorService() ]); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_unsupported_characters.php b/Tests/Fixtures/php/services_unsupported_characters.php index 68d442f63..7e03f763a 100644 --- a/Tests/Fixtures/php/services_unsupported_characters.php +++ b/Tests/Fixtures/php/services_unsupported_characters.php @@ -70,7 +70,7 @@ protected function getFooohnoService() return $this->services['foo*/oh-no'] = new \FooClass(); } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/php/services_url_env.php b/Tests/Fixtures/php/services_url_env.php index ff5fd5ccf..b370f8db7 100644 --- a/Tests/Fixtures/php/services_url_env.php +++ b/Tests/Fixtures/php/services_url_env.php @@ -35,7 +35,7 @@ public function isCompiled(): bool return true; } - public function getParameter(string $name): array|string|int|float|bool|null + public function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null { if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || \array_key_exists($name, $this->parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); diff --git a/Tests/Fixtures/xml/services_with_enumeration.xml b/Tests/Fixtures/xml/services_with_enumeration.xml index 30e80f005..3f26d968a 100644 --- a/Tests/Fixtures/xml/services_with_enumeration.xml +++ b/Tests/Fixtures/xml/services_with_enumeration.xml @@ -1,5 +1,12 @@ + + Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR + + Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR + Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::FOO + + diff --git a/Tests/Fixtures/yaml/services_with_enumeration.yml b/Tests/Fixtures/yaml/services_with_enumeration.yml index 46bf505d4..0d3357033 100644 --- a/Tests/Fixtures/yaml/services_with_enumeration.yml +++ b/Tests/Fixtures/yaml/services_with_enumeration.yml @@ -1,3 +1,6 @@ +parameters: + unit_enum: !php/const Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR + enum_array: [!php/const Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::BAR, !php/const Symfony\Component\DependencyInjection\Tests\Fixtures\FooUnitEnum::FOO] services: service_container: