From 21fb41abd93f1786129fed55bbfedee3737c6503 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 6 Aug 2018 23:57:05 +0200 Subject: [PATCH] decouple ParamTypeResolver --- .../NodeTypeResolver/src/NodeTypeResolver.php | 6 --- .../PerNodeTypeResolver/ParamTypeResolver.php | 52 +++++++++++++++++++ 2 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php diff --git a/packages/NodeTypeResolver/src/NodeTypeResolver.php b/packages/NodeTypeResolver/src/NodeTypeResolver.php index c666e12f50f..6fb5c00193b 100644 --- a/packages/NodeTypeResolver/src/NodeTypeResolver.php +++ b/packages/NodeTypeResolver/src/NodeTypeResolver.php @@ -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); } diff --git a/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php b/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php new file mode 100644 index 00000000000..6e466cad327 --- /dev/null +++ b/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php @@ -0,0 +1,52 @@ +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); + } +}