Skip to content

Commit

Permalink
[DI] Dont cache classes with missing parents
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed Nov 8, 2019
1 parent 9151698 commit 1606430
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 14 deletions.
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

0 comments on commit 1606430

Please sign in to comment.