Skip to content

Commit d9215a0

Browse files
committed
feature #57618 [TypeInfo] Add PhpDocAwareReflectionTypeResolver (mtarld)
This PR was merged into the 7.2 branch. Discussion ---------- [TypeInfo] Add `PhpDocAwareReflectionTypeResolver` | Q | A | ------------- | --- | Branch? | 7.2 | Bug fix? | no | New feature? | yes | Deprecations? | no | Issues | | License | MIT Add a `PhpDocAwareReflectionTypeResolver` that resolves type on reflections prioritizing PHP documentation. The same feature already exists in the `PropertyInfo` component and improves DX a lot. Installing `phpstan/phpdoc-parser` automatically enables this feature both using the type-info component standalone and the fullstack framework. Commits ------- c6698ced09 [TypeInfo] Add PhpDocAwareReflectionTypeResolver
2 parents c17b2dd + 213321d commit d9215a0

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Composer\InstalledVersions;
1515
use Http\Client\HttpAsyncClient;
1616
use Http\Client\HttpClient;
17+
use Symfony\Component\TypeInfo\TypeResolver\PhpDocAwareReflectionTypeResolver;
1718
use phpDocumentor\Reflection\DocBlockFactoryInterface;
1819
use phpDocumentor\Reflection\Types\ContextFactory;
1920
use PhpParser\Parser;
@@ -1974,11 +1975,21 @@ private function registerTypeInfoConfiguration(ContainerBuilder $container, PhpF
19741975
if (ContainerBuilder::willBeAvailable('phpstan/phpdoc-parser', PhpDocParser::class, ['symfony/framework-bundle', 'symfony/type-info'])) {
19751976
$container->register('type_info.resolver.string', StringTypeResolver::class);
19761977

1978+
$container->register('type_info.resolver.reflection_parameter.phpdoc_aware', PhpDocAwareReflectionTypeResolver::class)
1979+
->setArguments([new Reference('type_info.resolver.reflection_parameter'), new Reference('type_info.resolver.string'), new Reference('type_info.type_context_factory')]);
1980+
$container->register('type_info.resolver.reflection_property.phpdoc_aware', PhpDocAwareReflectionTypeResolver::class)
1981+
->setArguments([new Reference('type_info.resolver.reflection_property'), new Reference('type_info.resolver.string'), new Reference('type_info.type_context_factory')]);
1982+
$container->register('type_info.resolver.reflection_return.phpdoc_aware', PhpDocAwareReflectionTypeResolver::class)
1983+
->setArguments([new Reference('type_info.resolver.reflection_return'), new Reference('type_info.resolver.string'), new Reference('type_info.type_context_factory')]);
1984+
19771985
/** @var ServiceLocatorArgument $resolversLocator */
19781986
$resolversLocator = $container->getDefinition('type_info.resolver')->getArgument(0);
1979-
$resolversLocator->setValues($resolversLocator->getValues() + [
1987+
$resolversLocator->setValues([
19801988
'string' => new Reference('type_info.resolver.string'),
1981-
]);
1989+
\ReflectionParameter::class => new Reference('type_info.resolver.reflection_parameter.phpdoc_aware'),
1990+
\ReflectionProperty::class => new Reference('type_info.resolver.reflection_property.phpdoc_aware'),
1991+
\ReflectionFunctionAbstract::class => new Reference('type_info.resolver.reflection_return.phpdoc_aware'),
1992+
] + $resolversLocator->getValues());
19821993
}
19831994
}
19841995

0 commit comments

Comments
 (0)