Skip to content

Commit

Permalink
Resolver::resolveEntityType() ignores return types 'object' & 'mixed' [
Browse files Browse the repository at this point in the history
…Closes #274]
  • Loading branch information
dg committed Dec 14, 2021
1 parent 687b8af commit bc57e3c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/DI/Resolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public function resolveEntityType(Statement $statement): ?string
$this->addDependency($reflection);

$type = Nette\Utils\Type::fromReflection($reflection) ?? Helpers::getReturnTypeAnnotation($reflection);
if ($type) {
if ($type && !in_array((string) $type, ['object', 'mixed'])) {
return Helpers::ensureClassType($type, sprintf('return type of %s()', Callback::toString($entity)));
}

Expand Down
17 changes: 15 additions & 2 deletions tests/DI/ContainerBuilder.resolveTypes.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ class Factory
}


public function createObjectNullable(): ?object
{
return (object) null;
}


/** @return mixed */
public function createMixedPhpDoc()
{
Expand Down Expand Up @@ -141,7 +147,14 @@ Assert::exception(function () {
$builder->addDefinition('a')
->setFactory([Factory::class, 'createObject']);
$container = createContainer($builder);
}, Nette\DI\ServiceCreationException::class, "Service 'a': Return type of Factory::createObject() is not expected to be nullable/union/intersection/built-in, 'object' given.");
}, Nette\DI\ServiceCreationException::class, "Service 'a': Unknown service type, specify it or declare return type of factory.");

Assert::exception(function () {
$builder = new DI\ContainerBuilder;
$builder->addDefinition('a')
->setFactory([Factory::class, 'createObjectNullable']);
$container = createContainer($builder);
}, Nette\DI\ServiceCreationException::class, "Service 'a': Return type of Factory::createObjectNullable() is not expected to be nullable/union/intersection/built-in, '?object' given.");

Assert::exception(function () {
$builder = new DI\ContainerBuilder;
Expand All @@ -155,7 +168,7 @@ Assert::exception(function () {
$builder->addDefinition('a')
->setFactory([Factory::class, 'createMixed']);
$container = createContainer($builder);
}, Nette\DI\ServiceCreationException::class, "Service 'a': Return type of Factory::createMixed() is not expected to be nullable/union/intersection/built-in, 'mixed' given.");
}, Nette\DI\ServiceCreationException::class, "Service 'a': Unknown service type, specify it or declare return type of factory.");

Assert::exception(function () {
$builder = new DI\ContainerBuilder;
Expand Down

0 comments on commit bc57e3c

Please sign in to comment.