Skip to content

Commit 36ed3db

Browse files
Merge branch '6.1' into 6.2
* 6.1: Revert "minor symfony#47721 [Notifier] Use local copy of stella-maris/clock when testing (nicolas-grekas)" [FrameworkBundle] Fix deprecation when accessing a "container.private" service from the test container [DependencyInjection] Fix support for named arguments on non-autowired services
2 parents 0f6b87c + 9043f89 commit 36ed3db

File tree

13 files changed

+65
-67
lines changed

13 files changed

+65
-67
lines changed

.github/workflows/package-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121

2222
- name: Find packages
2323
id: find-packages
24-
run: echo "packages=$(php .github/get-modified-packages.php $(find src/Symfony -mindepth 2 -maxdepth 6 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji |jq -R -s -c 'split("\n")[:-1]') $(git diff --name-only origin/${{ github.base_ref }} HEAD | grep src/ | jq -R -s -c 'split("\n")[:-1]'))" >> $GITHUB_OUTPUT
24+
run: echo "packages=$(php .github/get-modified-packages.php $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji |jq -R -s -c 'split("\n")[:-1]') $(git diff --name-only origin/${{ github.base_ref }} HEAD | grep src/ | jq -R -s -c 'split("\n")[:-1]'))" >> $GITHUB_OUTPUT
2525

2626
- name: Verify meta files are correct
2727
run: |

.github/workflows/unit-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ jobs:
9393
echo SYMFONY_DEPRECATIONS_HELPER=weak >> $GITHUB_ENV
9494
cp composer.json composer.json.orig
9595
echo -e '{\n"require":{'"$(grep phpunit-bridge composer.json)"'"php":"*"},"minimum-stability":"dev"}' > composer.json
96-
php .github/build-packages.php HEAD^ $SYMFONY_VERSION $(find src/Symfony -mindepth 2 -maxdepth 6 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji)
96+
php .github/build-packages.php HEAD^ $SYMFONY_VERSION $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji)
9797
mv composer.json composer.json.phpunit
9898
mv composer.json.orig composer.json
9999
fi

composer.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,6 @@
202202
{
203203
"type": "path",
204204
"url": "src/Symfony/Component/Runtime"
205-
},
206-
{
207-
"type": "path",
208-
"url": "src/Symfony/Component/Notifier/Bridge/Mercure/Tests/stella-maris-clock",
209-
"options": {
210-
"versions": {
211-
"stella-maris/clock": "0.1.x-dev"
212-
}
213-
}
214205
}
215206
],
216207
"minimum-stability": "dev"

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14+
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
1415
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
1617
use Symfony\Component\DependencyInjection\Reference;
@@ -38,6 +39,16 @@ public function process(ContainerBuilder $container)
3839
}
3940
}
4041

42+
foreach ($container->getAliases() as $id => $target) {
43+
while ($container->hasAlias($target = (string) $target)) {
44+
$target = $container->getAlias($target);
45+
}
46+
47+
if ($definitions[$target]->hasTag('container.private')) {
48+
$privateServices[$id] = new ServiceClosureArgument(new Reference($target));
49+
}
50+
}
51+
4152
$privateContainer->replaceArgument(0, $privateServices);
4253
}
4354
}

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TestServiceContainerRefPassesTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ public function testProcess()
4343
->setPublic(true)
4444
->addTag('container.private', ['package' => 'foo/bar', 'version' => '1.42'])
4545
;
46+
$container->register('Test\soon_private_service_decorated')
47+
->setPublic(true)
48+
->addTag('container.private', ['package' => 'foo/bar', 'version' => '1.42'])
49+
;
50+
$container->register('Test\soon_private_service_decorator')
51+
->setDecoratedService('Test\soon_private_service_decorated')
52+
->setArguments(['Test\soon_private_service_decorator.inner']);
4653

4754
$container->register('Test\private_used_shared_service');
4855
$container->register('Test\private_unused_shared_service');
@@ -55,6 +62,8 @@ public function testProcess()
5562
'Test\private_used_shared_service' => new ServiceClosureArgument(new Reference('Test\private_used_shared_service')),
5663
'Test\private_used_non_shared_service' => new ServiceClosureArgument(new Reference('Test\private_used_non_shared_service')),
5764
'Test\soon_private_service' => new ServiceClosureArgument(new Reference('.container.private.Test\soon_private_service')),
65+
'Test\soon_private_service_decorator' => new ServiceClosureArgument(new Reference('.container.private.Test\soon_private_service_decorated')),
66+
'Test\soon_private_service_decorated' => new ServiceClosureArgument(new Reference('.container.private.Test\soon_private_service_decorated')),
5867
];
5968

6069
$privateServices = $container->getDefinition('test.private_services_locator')->getArgument(0);

src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
4040
foreach ($calls as $i => $call) {
4141
[$method, $arguments] = $call;
4242
$parameters = null;
43+
$resolvedKeys = [];
4344
$resolvedArguments = [];
4445

4546
foreach ($arguments as $key => $argument) {
@@ -48,6 +49,7 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
4849
}
4950

5051
if (\is_int($key)) {
52+
$resolvedKeys[$key] = $key;
5153
$resolvedArguments[$key] = $argument;
5254
continue;
5355
}
@@ -68,9 +70,11 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
6870
if ($key === '$'.$p->name) {
6971
if ($p->isVariadic() && \is_array($argument)) {
7072
foreach ($argument as $variadicArgument) {
73+
$resolvedKeys[$j] = $j;
7174
$resolvedArguments[$j++] = $variadicArgument;
7275
}
7376
} else {
77+
$resolvedKeys[$j] = $p->name;
7478
$resolvedArguments[$j] = $argument;
7579
}
7680

@@ -88,6 +92,7 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
8892
$typeFound = false;
8993
foreach ($parameters as $j => $p) {
9094
if (!\array_key_exists($j, $resolvedArguments) && ProxyHelper::exportType($p, true) === $key) {
95+
$resolvedKeys[$j] = $p->name;
9196
$resolvedArguments[$j] = $argument;
9297
$typeFound = true;
9398
}
@@ -100,6 +105,12 @@ protected function processValue(mixed $value, bool $isRoot = false): mixed
100105

101106
if ($resolvedArguments !== $call[1]) {
102107
ksort($resolvedArguments);
108+
109+
if (!$value->isAutowired() && !array_is_list($resolvedArguments)) {
110+
ksort($resolvedKeys);
111+
$resolvedArguments = array_combine($resolvedKeys, $resolvedArguments);
112+
}
113+
103114
$calls[$i][1] = $resolvedArguments;
104115
}
105116
}

src/Symfony/Component/DependencyInjection/ContainerBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,12 +1048,12 @@ private function createService(Definition $definition, array &$inlineServices, b
10481048

10491049
if (\is_object($tryProxy)) {
10501050
if ($r->getConstructor()) {
1051-
$tryProxy->__construct(...array_values($arguments));
1051+
$tryProxy->__construct(...$arguments);
10521052
}
10531053

10541054
$service = $tryProxy;
10551055
} else {
1056-
$service = $r->getConstructor() ? $r->newInstanceArgs(array_values($arguments)) : $r->newInstance();
1056+
$service = $r->getConstructor() ? $r->newInstanceArgs($arguments) : $r->newInstance();
10571057
}
10581058

10591059
if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) {

src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveNamedArgumentsPassTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public function testInterfaceTypedArgument()
165165
$pass = new ResolveNamedArgumentsPass();
166166
$pass->process($container);
167167

168-
$this->assertSame($expected, $definition->getArgument(3));
168+
$this->assertSame($expected, $definition->getArgument('container'));
169169
}
170170

171171
public function testResolvesMultipleArgumentsOfTheSameType()

src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,21 @@ public function testFindTags()
18291829

18301830
$this->assertSame(['tag1', 'tag2', 'tag3'], $container->findTags());
18311831
}
1832+
1833+
public function testNamedArgument()
1834+
{
1835+
$container = new ContainerBuilder();
1836+
$container->register(E::class)
1837+
->setPublic(true)
1838+
->setArguments(['$second' => 2]);
1839+
1840+
$container->compile();
1841+
1842+
$e = $container->get(E::class);
1843+
1844+
$this->assertSame('', $e->first);
1845+
$this->assertSame(2, $e->second);
1846+
}
18321847
}
18331848

18341849
class FooClass
@@ -1857,3 +1872,15 @@ class C implements X
18571872
class D implements X
18581873
{
18591874
}
1875+
1876+
class E
1877+
{
1878+
public $first;
1879+
public $second;
1880+
1881+
public function __construct($first = '', $second = '')
1882+
{
1883+
$this->first = $first;
1884+
$this->second = $second;
1885+
}
1886+
}

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ protected function tearDown(): void
3535
public static function getTimeZones()
3636
{
3737
yield ['UTC'];
38-
yield ['Etc/GMT+9'];
39-
yield ['Etc/GMT-14'];
38+
yield ['Pacific/Honolulu'];
39+
yield ['America/Toronto'];
4040
}
4141

4242
public static function getClasses()

0 commit comments

Comments
 (0)