Tweaking class not found autowiring error
This commit is contained in:
parent
50644d0d58
commit
48832e640a
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\DependencyInjection\Compiler;
|
namespace Symfony\Component\DependencyInjection\Compiler;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\Resource\ClassExistenceResource;
|
||||||
use Symfony\Component\DependencyInjection\Config\AutowireServiceResource;
|
use Symfony\Component\DependencyInjection\Config\AutowireServiceResource;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
@ -485,7 +486,17 @@ class AutowirePass extends AbstractRecursivePass
|
|||||||
private function createTypeNotFoundMessage(TypedReference $reference, $label)
|
private function createTypeNotFoundMessage(TypedReference $reference, $label)
|
||||||
{
|
{
|
||||||
if (!$r = $this->container->getReflectionClass($type = $reference->getType(), false)) {
|
if (!$r = $this->container->getReflectionClass($type = $reference->getType(), false)) {
|
||||||
$message = sprintf('has type "%s" but this class cannot be loaded.', $type);
|
// either $type does not exist or a parent class does not exist
|
||||||
|
try {
|
||||||
|
$resource = new ClassExistenceResource($type, false);
|
||||||
|
// isFresh() will explode ONLY if a parent class/trait does not exist
|
||||||
|
$resource->isFresh(0);
|
||||||
|
$parentMsg = false;
|
||||||
|
} catch (\ReflectionException $e) {
|
||||||
|
$parentMsg = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = sprintf('has type "%s" but this class %s.', $type, $parentMsg ? sprintf('is missing a parent class (%s)', $parentMsg) : 'was not found');
|
||||||
} else {
|
} else {
|
||||||
$message = $this->container->has($type) ? 'this service is abstract' : 'no such service exists';
|
$message = $this->container->has($type) ? 'this service is abstract' : 'no such service exists';
|
||||||
$message = sprintf('references %s "%s" but %s.%s', $r->isInterface() ? 'interface' : 'class', $type, $message, $this->createTypeAlternatives($reference));
|
$message = sprintf('references %s "%s" but %s.%s', $r->isInterface() ? 'interface' : 'class', $type, $message, $this->createTypeAlternatives($reference));
|
||||||
|
@ -359,7 +359,7 @@ class AutowirePassTest extends TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
|
||||||
* @expectedExceptionMessage Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class cannot be loaded.
|
* @expectedExceptionMessage Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class was not found.
|
||||||
*/
|
*/
|
||||||
public function testClassNotFoundThrowsException()
|
public function testClassNotFoundThrowsException()
|
||||||
{
|
{
|
||||||
@ -374,7 +374,7 @@ class AutowirePassTest extends TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
|
||||||
* @expectedExceptionMessage 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 cannot be loaded.
|
* @expectedExceptionMessage 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).
|
||||||
*/
|
*/
|
||||||
public function testParentClassNotFoundThrowsException()
|
public function testParentClassNotFoundThrowsException()
|
||||||
{
|
{
|
||||||
@ -761,7 +761,7 @@ class AutowirePassTest extends TestCase
|
|||||||
public function provideNotWireableCalls()
|
public function provideNotWireableCalls()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
array('setNotAutowireable', 'Cannot autowire service "foo": argument "$n" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setNotAutowireable()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class cannot be loaded.'),
|
array('setNotAutowireable', 'Cannot autowire service "foo": argument "$n" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setNotAutowireable()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class was not found.'),
|
||||||
array('setDifferentNamespace', 'Cannot autowire service "foo": argument "$n" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setDifferentNamespace()" references class "stdClass" but no such service exists. It cannot be auto-registered because it is from a different root namespace.'),
|
array('setDifferentNamespace', 'Cannot autowire service "foo": argument "$n" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setDifferentNamespace()" references class "stdClass" but no such service exists. It cannot be auto-registered because it is from a different root namespace.'),
|
||||||
array(null, 'Cannot autowire service "foo": method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setProtectedMethod()" must be public.'),
|
array(null, 'Cannot autowire service "foo": method "Symfony\Component\DependencyInjection\Tests\Compiler\NotWireable::setProtectedMethod()" must be public.'),
|
||||||
);
|
);
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them"
|
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"symfony/config": "<3.3.1",
|
"symfony/config": "<3.3.7",
|
||||||
"symfony/finder": "<3.3",
|
"symfony/finder": "<3.3",
|
||||||
"symfony/yaml": "<3.3"
|
"symfony/yaml": "<3.3"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user