Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DI] Dont cache classes with missing parents #34282

Merged
merged 1 commit into from Nov 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -155,7 +155,7 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
throw $previous;
}

$e = new \ReflectionException("Class $class not found", 0, $previous);
$e = new \ReflectionException(sprintf('Class "%s" not found while loading "%s".', $class, self::$autoloadedClass), 0, $previous);

if (null !== $previous) {
throw $e;
Expand Down
Expand Up @@ -84,7 +84,7 @@ public function testBadParentWithTimestamp()
public function testBadParentWithNoTimestamp()
{
$this->expectException('ReflectionException');
$this->expectExceptionMessage('Class Symfony\Component\Config\Tests\Fixtures\MissingParent not found');
$this->expectExceptionMessage('Class "Symfony\Component\Config\Tests\Fixtures\MissingParent" not found while loading "Symfony\Component\Config\Tests\Fixtures\BadParent".');

$res = new ClassExistenceResource(BadParent::class, false);
$res->isFresh(0);
Expand Down
Expand Up @@ -361,7 +361,7 @@ public function getReflectionClass($class, $throw = true)
return null;
}

$resource = null;
$resource = $classReflector = null;

try {
if (isset($this->classReflectors[$class])) {
Expand All @@ -376,7 +376,6 @@ public function getReflectionClass($class, $throw = true)
if ($throw) {
throw $e;
}
$classReflector = false;
}

if ($this->trackResources) {
Expand Down
Expand Up @@ -149,12 +149,7 @@ private function findClasses($namespace, $pattern, $excludePattern)
try {
$r = $this->container->getReflectionClass($class);
} catch (\ReflectionException $e) {
$classes[$class] = sprintf(
'While discovering services from namespace "%s", an error was thrown when processing the class "%s": "%s".',
$namespace,
$class,
$e->getMessage()
);
$classes[$class] = $e->getMessage();
continue;
}
// check to make sure the expected class exists
Expand Down
Expand Up @@ -380,7 +380,7 @@ public function testClassNotFoundThrowsException()
public function testParentClassNotFoundThrowsException()
{
$this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
$this->expectExceptionMessage('Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadParentTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\OptionalServiceClass" but this class is missing a parent class (Class Symfony\Bug\NotExistClass not found).');
$this->expectExceptionMessageRegExp('{^Cannot autowire service "a": argument "\$r" of method "(Symfony\\\\Component\\\\DependencyInjection\\\\Tests\\\\Compiler\\\\)BadParentTypeHintedArgument::__construct\(\)" has type "\1OptionalServiceClass" but this class is missing a parent class \(Class "?Symfony\\\\Bug\\\\NotExistClass"? not found}');

$container = new ContainerBuilder();

Expand Down
Expand Up @@ -178,9 +178,9 @@ public function testMissingParentClass()

$this->assertTrue($container->has(MissingParent::class));

$this->assertSame(
['While discovering services from namespace "Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\", an error was thrown when processing the class "Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\MissingParent": "Class Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\MissingClass not found".'],
$container->getDefinition(MissingParent::class)->getErrors()
$this->assertRegExp(
'{Class "?Symfony\\\\Component\\\\DependencyInjection\\\\Tests\\\\Fixtures\\\\Prototype\\\\BadClasses\\\\MissingClass"? not found}',
$container->getDefinition(MissingParent::class)->getErrors()[0]
);
}

Expand Down