Migrate from PHPStan's Broker to ReflectionProvider

This commit is contained in:
Lctrs 2020-01-13 14:34:18 +01:00
parent 31bc254ceb
commit 173e3ddf15
8 changed files with 46 additions and 43 deletions

View File

@ -16,8 +16,8 @@ services:
Rector\PhpParser\Node\BetterNodeFinder: null
# PHPStan
PHPStan\Broker\Broker:
factory: ['@Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory', 'createBroker']
PHPStan\Reflection\ReflectionProvider:
factory: ['@Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory', 'createReflectionProvider']
PHPStan\Analyser\NodeScopeResolver:
factory: ['@Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory', 'createNodeScopeResolver']

View File

@ -9,11 +9,11 @@ use Nette\Utils\Strings;
use PHPStan\Analyser\NodeScopeResolver;
use PHPStan\Analyser\ScopeFactory;
use PHPStan\Analyser\TypeSpecifier;
use PHPStan\Broker\Broker;
use PHPStan\DependencyInjection\Container;
use PHPStan\DependencyInjection\ContainerFactory;
use PHPStan\DependencyInjection\Type\DynamicReturnTypeExtensionRegistryProvider;
use PHPStan\DependencyInjection\Type\OperatorTypeSpecifyingExtensionRegistryProvider;
use PHPStan\Reflection\ReflectionProvider;
final class PHPStanServicesFactory
{
@ -72,9 +72,9 @@ final class PHPStanServicesFactory
}
}
public function createBroker(): Broker
public function createReflectionProvider(): ReflectionProvider
{
return $this->container->getByType(Broker::class);
return $this->container->getByType(ReflectionProvider::class);
}
public function createNodeScopeResolver(): NodeScopeResolver

View File

@ -35,8 +35,8 @@ use PhpParser\Node\Stmt\PropertyProperty;
use PhpParser\Node\Stmt\Trait_;
use PhpParser\NodeTraverser;
use PHPStan\Analyser\Scope;
use PHPStan\Broker\Broker;
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\Accessory\HasOffsetType;
use PHPStan\Type\Accessory\NonEmptyArrayType;
use PHPStan\Type\ArrayType;
@ -101,9 +101,9 @@ final class NodeTypeResolver
private $classReflectionTypesResolver;
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
/**
* @var TypeFactory
@ -145,7 +145,7 @@ final class NodeTypeResolver
ParsedNodesByType $parsedNodesByType,
CallableNodeTraverser $callableNodeTraverser,
ClassReflectionTypesResolver $classReflectionTypesResolver,
Broker $broker,
ReflectionProvider $reflectionProvider,
TypeFactory $typeFactory,
StaticTypeMapper $staticTypeMapper,
ObjectTypeSpecifier $objectTypeSpecifier,
@ -161,7 +161,7 @@ final class NodeTypeResolver
$this->callableNodeTraverser = $callableNodeTraverser;
$this->classReflectionTypesResolver = $classReflectionTypesResolver;
$this->broker = $broker;
$this->reflectionProvider = $reflectionProvider;
$this->typeFactory = $typeFactory;
$this->objectTypeSpecifier = $objectTypeSpecifier;
$this->betterNodeFinder = $betterNodeFinder;
@ -811,7 +811,7 @@ final class NodeTypeResolver
*/
private function getClassLikeTypesByClassName(string $className): array
{
$classReflection = $this->broker->getClass($className);
$classReflection = $this->reflectionProvider->getClass($className);
$classLikeTypes = $this->classReflectionTypesResolver->resolve($classReflection);

View File

@ -13,8 +13,8 @@ use PhpParser\NodeTraverser;
use PHPStan\Analyser\MutatingScope;
use PHPStan\Analyser\NodeScopeResolver as PHPStanNodeScopeResolver;
use PHPStan\Analyser\Scope;
use PHPStan\Broker\Broker;
use PHPStan\Node\UnreachableStatementNode;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Exception\ShouldNotHappenException;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\Collector\TraitNodeScopeCollector;
@ -37,9 +37,9 @@ final class NodeScopeResolver
private $scopeFactory;
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
/**
* @var RemoveDeepChainMethodCallNodeVisitor
@ -54,13 +54,13 @@ final class NodeScopeResolver
public function __construct(
ScopeFactory $scopeFactory,
PHPStanNodeScopeResolver $phpStanNodeScopeResolver,
Broker $broker,
ReflectionProvider $reflectionProvider,
RemoveDeepChainMethodCallNodeVisitor $removeDeepChainMethodCallNodeVisitor,
TraitNodeScopeCollector $traitNodeScopeCollector
) {
$this->scopeFactory = $scopeFactory;
$this->phpStanNodeScopeResolver = $phpStanNodeScopeResolver;
$this->broker = $broker;
$this->reflectionProvider = $reflectionProvider;
$this->removeDeepChainMethodCallNodeVisitor = $removeDeepChainMethodCallNodeVisitor;
$this->traitNodeScopeCollector = $traitNodeScopeCollector;
}
@ -123,7 +123,7 @@ final class NodeScopeResolver
private function resolveClassOrInterfaceScope(Node $classOrInterfaceNode, MutatingScope $scope): MutatingScope
{
$className = $this->resolveClassName($classOrInterfaceNode);
$classReflection = $this->broker->getClass($className);
$classReflection = $this->reflectionProvider->getClass($className);
return $scope->enterClass($classReflection);
}

View File

@ -9,18 +9,18 @@ use PHPStan\Analyser\Scope;
use PHPStan\Analyser\ScopeContext;
use PHPStan\Analyser\ScopeFactory as PHPStanScopeFactory;
use PHPStan\Analyser\TypeSpecifier;
use PHPStan\Broker\Broker;
use PHPStan\DependencyInjection\Type\DynamicReturnTypeExtensionRegistryProvider;
use PHPStan\DependencyInjection\Type\OperatorTypeSpecifyingExtensionRegistryProvider;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Rules\Properties\PropertyReflectionFinder;
use Rector\PhpParser\Printer\BetterStandardPrinter;
final class ScopeFactory
{
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
/**
* @var TypeSpecifier
@ -48,14 +48,14 @@ final class ScopeFactory
private $operatorTypeSpecifyingExtensionRegistryProvider;
public function __construct(
Broker $broker,
ReflectionProvider $reflectionProvider,
TypeSpecifier $typeSpecifier,
PHPStanScopeFactory $phpStanScopeFactory,
BetterStandardPrinter $betterStandardPrinter,
DynamicReturnTypeExtensionRegistryProvider $dynamicReturnTypeExtensionRegistryProvider,
OperatorTypeSpecifyingExtensionRegistryProvider $operatorTypeSpecifyingExtensionRegistryProvider
) {
$this->broker = $broker;
$this->reflectionProvider = $reflectionProvider;
$this->typeSpecifier = $typeSpecifier;
$this->phpStanScopeFactory = $phpStanScopeFactory;
$this->betterStandardPrinter = $betterStandardPrinter;
@ -67,7 +67,7 @@ final class ScopeFactory
{
return new MutatingScope(
$this->phpStanScopeFactory,
$this->broker,
$this->reflectionProvider,
$this->dynamicReturnTypeExtensionRegistryProvider->getRegistry(),
$this->operatorTypeSpecifyingExtensionRegistryProvider->getRegistry(),
$this->betterStandardPrinter,

View File

@ -4,19 +4,19 @@ declare(strict_types=1);
namespace Rector\NodeTypeResolver\Reflection;
use PHPStan\Broker\Broker;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\ReflectionProvider;
final class ClassReflectionTypesResolver
{
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
public function __construct(Broker $broker)
public function __construct(ReflectionProvider $reflectionProvider)
{
$this->broker = $broker;
$this->reflectionProvider = $reflectionProvider;
}
/**
@ -48,7 +48,7 @@ final class ClassReflectionTypesResolver
// to cover traits of parent classes
foreach ($classReflection->getParentClassesNames() as $parentClassName) {
$parentClassReflection = $this->broker->getClass($parentClassName);
$parentClassReflection = $this->reflectionProvider->getClass($parentClassName);
foreach ($parentClassReflection->getTraits() as $parentClassTrait) {
$types[] = $parentClassTrait->getName();

View File

@ -12,20 +12,20 @@ use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Name;
use PHPStan\Analyser\Scope;
use PHPStan\Broker\Broker;
use PHPStan\Broker\FunctionNotFoundException;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptor;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\ReflectionProvider;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\PhpParser\Node\Resolver\NameResolver;
final class CallReflection
{
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
/**
* @var NodeTypeResolver
@ -37,9 +37,12 @@ final class CallReflection
*/
private $nameResolver;
public function __construct(Broker $broker, NodeTypeResolver $nodeTypeResolver, NameResolver $nameResolver)
{
$this->broker = $broker;
public function __construct(
ReflectionProvider $reflectionProvider,
NodeTypeResolver $nodeTypeResolver,
NameResolver $nameResolver
) {
$this->reflectionProvider = $reflectionProvider;
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nameResolver = $nameResolver;
}
@ -98,7 +101,7 @@ final class CallReflection
return ParametersAcceptorSelector::selectFromArgs(
$scope,
$args,
$this->broker->getFunction($name, $scope)->getVariants()
$this->reflectionProvider->getFunction($name, $scope)->getVariants()
)->getParameters();
} catch (FunctionNotFoundException $functionNotFoundException) {
return [];

View File

@ -15,7 +15,7 @@ use PhpParser\Node\Param;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\NodeTraverser;
use PHPStan\Broker\Broker;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\ErrorType;
use PHPStan\Type\MixedType;
use PHPStan\Type\ObjectType;
@ -38,9 +38,9 @@ final class PropertyFetchManipulator
private $nodeTypeResolver;
/**
* @var Broker
* @var ReflectionProvider
*/
private $broker;
private $reflectionProvider;
/**
* @var NameResolver
@ -59,12 +59,12 @@ final class PropertyFetchManipulator
public function __construct(
NodeTypeResolver $nodeTypeResolver,
Broker $broker,
ReflectionProvider $reflectionProvider,
NameResolver $nameResolver,
CallableNodeTraverser $callableNodeTraverser
) {
$this->nodeTypeResolver = $nodeTypeResolver;
$this->broker = $broker;
$this->reflectionProvider = $reflectionProvider;
$this->nameResolver = $nameResolver;
$this->callableNodeTraverser = $callableNodeTraverser;
}
@ -345,11 +345,11 @@ final class PropertyFetchManipulator
return false;
}
if (! $this->broker->hasClass($propertyFetchType)) {
if (! $this->reflectionProvider->hasClass($propertyFetchType)) {
return false;
}
$classReflection = $this->broker->getClass($propertyFetchType);
$classReflection = $this->reflectionProvider->getClass($propertyFetchType);
if (! $classReflection->hasProperty($propertyName)) {
return false;
}