mirror of
https://github.com/rectorphp/rector.git
synced 2025-03-14 04:19:44 +01:00
decouple ParamTypeResolver
This commit is contained in:
parent
85aea7d8f8
commit
21fb41abd9
@ -5,7 +5,6 @@ namespace Rector\NodeTypeResolver;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Param;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use Rector\Node\Attribute;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
@ -46,11 +45,6 @@ final class NodeTypeResolver
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($node instanceof Param) {
|
||||
// @todo resolve parents etc.
|
||||
return [$node->type->toString()];
|
||||
}
|
||||
|
||||
if ($node instanceof Expr && ! $node instanceof Variable) {
|
||||
return $this->resolveExprNode($node);
|
||||
}
|
||||
|
@ -0,0 +1,52 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PerNodeTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Param;
|
||||
use PHPStan\Broker\Broker;
|
||||
use Rector\NodeTypeResolver\Contract\PerNodeTypeResolver\PerNodeTypeResolverInterface;
|
||||
use Rector\NodeTypeResolver\Reflection\ClassReflectionTypesResolver;
|
||||
|
||||
final class ParamTypeResolver implements PerNodeTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var Broker
|
||||
*/
|
||||
private $broker;
|
||||
|
||||
/**
|
||||
* @var ClassReflectionTypesResolver
|
||||
*/
|
||||
private $classReflectionTypesResolver;
|
||||
|
||||
public function __construct(Broker $broker, ClassReflectionTypesResolver $classReflectionTypesResolver)
|
||||
{
|
||||
$this->broker = $broker;
|
||||
$this->classReflectionTypesResolver = $classReflectionTypesResolver;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getNodeClasses(): array
|
||||
{
|
||||
return [Param::class];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Param $paramNode
|
||||
* @return string[]
|
||||
*/
|
||||
public function resolve(Node $paramNode): array
|
||||
{
|
||||
$paramType = $paramNode->type->toString();
|
||||
|
||||
if (! $this->broker->hasClass($paramType)) {
|
||||
return [$paramType];
|
||||
}
|
||||
|
||||
$classReflection = $this->broker->getClass($paramType);
|
||||
return $this->classReflectionTypesResolver->resolve($classReflection);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user