8000 bug #29107 [DI] dont track classes/interfaces used to compute autowir… · symfony/symfony@f898332 · GitHub
[go: up one dir, main page]

Skip to content

Commit f898332

Browse files
bug #29107 [DI] dont track classes/interfaces used to compute autowiring error messages (nicolas-grekas)
This PR was merged into the 3.4 branch. Discussion ---------- [DI] dont track classes/interfaces used to compute autowiring error messages | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #29019 | License | MIT | Doc PR | - This will also improve DX since tracking these files is not needed at all. Commits ------- 09a0c23 [DI] dont track classes/interfaces used to compute autowiring error messages
2 parents 3ed98de + 09a0c23 commit f898332

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,17 @@ private function createAutowiredDefinition($type)
452452

453453
private function createTypeNotFoundMessage(TypedReference $reference, $label)
454454
{
455-
if (!$r = $this->container->getReflectionClass($type = $reference->getType(), false)) {
455+
$trackResources = $this->container->isTrackingResources();
456+
$this->container->setResourceTracking(false);
457+
try {
458+
if ($r = $this->container->getReflectionClass($type = $reference->getType(), false)) {
459+
$alternatives = $this->createTypeAlternatives($reference);
460+
}
461+
} finally {
462+
$this->container->setResourceTracking($trackResources);
463+
}
464+
465+
if (!$r) {
456466
// either $type does not exist or a parent class does not exist
457467
try {
458468
$resource = new ClassExistenceResource($type, false);
@@ -465,7 +475,6 @@ private function createTypeNotFoundMessage(TypedReference $reference, $label)
465475

466476
$message = sprintf('has type "%s" but this class %s.', $type, $parentMsg ? sprintf('is missing a parent class (%s)', $parentMsg) : 'was not found');
467477
} else {
468-
$alternatives = $this->createTypeAlternatives($reference);
469478
$message = $this->container->has($type) ? 'this service is abstract' : 'no such service exists';
470479
$message = sprintf('references %s "%s" but %s.%s', $r->isInterface() ? 'interface' : 'class', $type, $message, $alternatives);
471480

src/Symfony/Component/DependencyInjection/ContainerBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ public function getReflectionClass($class, $throw = true)
364364
try {
365365
if (isset($this->classReflectors[$class])) {
366366
$classReflector = $this->classReflectors[$class];
367-
} elseif ($this->trackResources) {
367+
} elseif (class_exists(ClassExistenceResource::class)) {
368368
$resource = new ClassExistenceResource($class, false);
369369
$classReflector = $resource->isFresh(0) ? false : new \ReflectionClass($class);
370370
} else {

0 commit comments

Comments
 (0)
0