From 7f05c600f71b3a287bf7e0924f123513f99a9438 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Wed, 25 Oct 2017 12:12:01 +0200 Subject: [PATCH] prepare support for multi-types [ref #97] --- .../src/PerNodeTypeResolver/AssignTypeResolver.php | 8 ++++---- .../src/PerNodeTypeResolver/ParamTypeResolver.php | 2 +- packages/NodeTypeResolver/src/TypeContext.php | 7 ++++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/NodeTypeResolver/src/PerNodeTypeResolver/AssignTypeResolver.php b/packages/NodeTypeResolver/src/PerNodeTypeResolver/AssignTypeResolver.php index 88834a2268c..3470ea2a749 100644 --- a/packages/NodeTypeResolver/src/PerNodeTypeResolver/AssignTypeResolver.php +++ b/packages/NodeTypeResolver/src/PerNodeTypeResolver/AssignTypeResolver.php @@ -45,16 +45,16 @@ final class AssignTypeResolver implements PerNodeTypeResolverInterface, NodeType return []; } - $variableType = $this->resolveTypeForRightSide($assignNode); + $variableTypes = $this->resolveTypeForRightSide($assignNode); - if ($variableType) { + if ($variableTypes) { /** @var Variable $variableNode */ $variableNode = $assignNode->var; $variableName = $variableNode->name; - $this->typeContext->addVariableWithTypes($variableName, $variableType); + $this->typeContext->addVariableWithTypes($variableName, $variableTypes); } - return [$variableType]; + return [$variableTypes]; } public function setNodeTypeResolver(NodeTypeResolver $nodeTypeResolver): void diff --git a/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php b/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php index 7e4e9f42555..b441f185f7f 100644 --- a/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php +++ b/packages/NodeTypeResolver/src/PerNodeTypeResolver/ParamTypeResolver.php @@ -74,7 +74,7 @@ final class ParamTypeResolver implements PerNodeTypeResolverInterface, NodeTypeR // resolve param type from docblock $paramType = $this->docBlockAnalyzer->getParamTypeFor($classMethod, $variableName); if ($paramType === null) { - return null; + return []; } // resolve to FQN diff --git a/packages/NodeTypeResolver/src/TypeContext.php b/packages/NodeTypeResolver/src/TypeContext.php index 6ab78871827..a62045fde4d 100644 --- a/packages/NodeTypeResolver/src/TypeContext.php +++ b/packages/NodeTypeResolver/src/TypeContext.php @@ -92,7 +92,12 @@ final class TypeContext $functionReflection = $this->getFunctionReflection($functionLikeNode); if ($functionReflection) { foreach ($functionReflection->getParameters() as $parameterReflection) { - $this->variableTypes[$parameterReflection->getName()] = (string) $parameterReflection->getType(); + $type = (string) $parameterReflection->getType(); + if (! $type) { + continue; + } + + $this->variableTypes[$parameterReflection->getName()] = [$type]; } } }