Skip to content

Commit ba9f109

Browse files
Merge branch '5.4' into 6.0
* 5.4: Fix CI by removing ext-mongodb [ErrorHandler] fix parsing `@param` with dollars in the description [SecurityBundle] Fix wrong array key [SecurityBundle] Fix listing listeners in profiler when authenticator manager is disabled Fix FlattenException::setPrevious argument typing bug #43941 [FrameworkBundle] Comment design decision [DependencyInjection] fix auto-refresh when inline_factories is enabled
2 parents 215bd86 + a770a58 commit ba9f109

File tree

6 files changed

+41
-30
lines changed

6 files changed

+41
-30
lines changed

Dumper/PhpDumper.php

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ public function dump(array $options = []): string|array
215215
}
216216

217217
$code =
218-
$this->startClass($options['class'], $baseClass).
218+
$this->startClass($options['class'], $baseClass, $this->inlineFactories && $proxyClasses).
219219
$this->addServices($services).
220220
$this->addDeprecatedAliases().
221221
$this->addDefaultParametersMethod()
@@ -279,14 +279,15 @@ class %s extends {$options['class']}
279279

280280
$code .= $this->endClass();
281281

282-
if ($this->inlineFactories) {
282+
if ($this->inlineFactories && $proxyClasses) {
283+
$files['proxy-classes.php'] = "<?php\n\n";
284+
283285
foreach ($proxyClasses as $c) {
284-
$code .= $c;
286+
$files['proxy-classes.php'] .= $c;
285287
}
286288
}
287289

288290
$files[$options['class'].'.php'] = $code;
289-
$preloadedFiles[$options['class'].'.php'] = $options['class'].'.php';
290291
$hash = ucfirst(strtr(ContainerBuilder::hash($files), '._', 'xx'));
291292
$code = [];
292293

@@ -306,7 +307,9 @@ class %s extends {$options['class']}
306307
$autoloadFile = trim($this->export($autoloadFile), '()\\');
307308

308309
$preloadedFiles = array_reverse($preloadedFiles);
309-
$preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles);
310+
if ('' !== $preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles)) {
311+
$preloadedFiles = "require __DIR__.'/$preloadedFiles';\n";
312+
}
310313

311314
$code[$options['class'].'.preload.php'] = <<<EOF
312315
<?php
@@ -321,8 +324,8 @@ class %s extends {$options['class']}
321324
}
322325
323326
require $autoloadFile;
324-
require __DIR__.'/$preloadedFiles';
325-
327+
(require __DIR__.'/Container{$hash}/{$options['class']}.php')->set(\\Container{$hash}\\{$options['class']}::class, null);
328+
$preloadedFiles
326329
\$classes = [];
327330
328331
EOF;
@@ -1166,7 +1169,7 @@ private function addNewInstance(Definition $definition, string $return = '', str
11661169
return $return.sprintf('new %s(%s)', $this->dumpLiteralClass($this->dumpValue($class)), implode(', ', $arguments)).$tail;
11671170
}
11681171

1169-
private function startClass(string $class, string $baseClass): string
1172+
private function startClass(string $class, string $baseClass, bool $hasProxyClasses): string
11701173
{
11711174
$namespaceLine = !$this->asFiles && $this->namespace ? "\nnamespace {$this->namespace};\n" : '';
11721175

@@ -1226,7 +1229,7 @@ public function __construct()
12261229
$code .= $this->addMethodMap();
12271230
$code .= $this->asFiles && !$this->inlineFactories ? $this->addFileMap() : '';
12281231
$code .= $this->addAliases();
1229-
$code .= $this->addInlineRequires();
1232+
$code .= $this->addInlineRequires($hasProxyClasses);
12301233
$code .= <<<EOF
12311234
}
12321235
@@ -1438,15 +1441,12 @@ protected function {$methodNameAlias}()
14381441
return $code;
14391442
}
14401443

1441-
private function addInlineRequires(): string
1444+
private function addInlineRequires(bool $hasProxyClasses): string
14421445
{
1443-
if (!$this->hotPathTag || !$this->inlineRequires) {
1444-
return '';
1445-
}
1446-
14471446
$lineage = [];
1447+
$hotPathServices = $this->hotPathTag && $this->inlineRequires ? $this->container->findTaggedServiceIds($this->hotPathTag) : [];
14481448

1449-
foreach ($this->container->findTaggedServiceIds($this->hotPathTag) as $id => $tags) {
1449+
foreach ($hotPathServices as $id => $tags) {
14501450
$definition = $this->container->getDefinition($id);
14511451

14521452
if ($this->getProxyDumper()->isProxyCandidate($definition)) {
@@ -1471,6 +1471,10 @@ private function addInlineRequires(): string
14711471
}
14721472
}
14731473

1474+
if ($hasProxyClasses) {
1475+
$code .= "\n include __DIR__.'/proxy-classes.php';";
1476+
}
1477+
14741478
return $code ? sprintf("\n \$this->privates['service_container'] = function () {%s\n };\n", $code) : '';
14751479
}
14761480

Tests/Fixtures/php/services10_as_files.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
131131
}
132132

133133
require dirname(__DIR__, %d).'%svendor/autoload.php';
134-
require __DIR__.'/Container%s/ProjectServiceContainer.php';
134+
(require __DIR__.'/Container%s/ProjectServiceContainer.php')->set(\Container%s\ProjectServiceContainer::class, null);
135135
require __DIR__.'/Container%s/getClosureService.php';
136136

137137
$classes = [];

Tests/Fixtures/php/services9_as_files.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
897897
}
898898

899899
require dirname(__DIR__, %d).'%svendor/autoload.php';
900-
require __DIR__.'/Container%s/ProjectServiceContainer.php';
900+
(require __DIR__.'/Container%s/ProjectServiceContainer.php')->set(\Container%s\ProjectServiceContainer::class, null);
901901
require __DIR__.'/Container%s/getThrowingOneService.php';
902902
require __DIR__.'/Container%s/getTaggedIteratorService.php';
903903
require __DIR__.'/Container%s/getServiceFromStaticMethodService.php';

Tests/Fixtures/php/services9_inlined_factories.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
552552
}
553553

554554
require dirname(__DIR__, %d).'%svendor/autoload.php';
555-
require __DIR__.'/Container%s/ProjectServiceContainer.php';
555+
(require __DIR__.'/Container%s/ProjectServiceContainer.php')->set(\Container%s\ProjectServiceContainer::class, null);
556556

557557
$classes = [];
558558
$classes[] = 'Bar\FooClass';

Tests/Fixtures/php/services9_lazy_inlined_factories.txt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
Array
22
(
3+
[Container%s/proxy-classes.php] => <?php
4+
5+
namespace Container%s;
6+
7+
include_once $this->targetDir.''.'/Fixtures/includes/foo.php';
8+
9+
class FooClass_%s extends \Bar\FooClass implements \ProxyManager\Proxy\VirtualProxyInterface
10+
%A
11+
12+
if (!\class_exists('FooClass_%s', false)) {
13+
\class_alias(__NAMESPACE__.'\\FooClass_%s', 'FooClass_%s', false);
14+
}
15+
316
[Container%s/ProjectServiceContainer.php] => <?php
417

518
namespace Container%s;
@@ -36,6 +49,10 @@ class ProjectServiceContainer extends Container
3649
];
3750

3851
$this->aliases = [];
52+
53+
$this->privates['service_container'] = function () {
54+
include __DIR__.'/proxy-classes.php';
55+
};
3956
}
4057

4158
public function compile(): void
@@ -139,16 +156,6 @@ class ProjectServiceContainer extends Container
139156
];
140157
}
141158
}
142-
include_once $this->targetDir.''.'/Fixtures/includes/foo.php';
143-
144-
class FooClass_%s extends \Bar\FooClass implements \ProxyManager\Proxy\VirtualProxyInterface
145-
{
146-
%A
147-
}
148-
149-
if (!\class_exists('FooClass_%s', false)) {
150-
\class_alias(__NAMESPACE__.'\\FooClass_%s', 'FooClass_%s', false);
151-
}
152159

153160
[ProjectServiceContainer.preload.php] => <?php
154161

@@ -162,7 +169,7 @@ if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
162169
}
163170

164171
require dirname(__DIR__, %d).'%svendor/autoload.php';
165-
require __DIR__.'/Container%s/ProjectServiceContainer.php';
172+
(require __DIR__.'/Container%s/ProjectServiceContainer.php')->set(\Container%s\ProjectServiceContainer::class, null);
166173

167174
$classes = [];
168175
$classes[] = 'Bar\FooClass';

Tests/Fixtures/php/services_non_shared_lazy_as_files.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) {
130130
}
131131

132132
require dirname(__DIR__, %d).'%svendor/autoload.php';
133-
require __DIR__.'/Container%s/ProjectServiceContainer.php';
133+
(require __DIR__.'/Container%s/ProjectServiceContainer.php')->set(\Container%s\ProjectServiceContainer::class, null);
134134
require __DIR__.'/Container%s/proxy.php';
135135
require __DIR__.'/Container%s/getNonSharedFooService.php';
136136

0 commit comments

Comments
 (0)