From cbc6966c92deff7c0636703b875677d3a562e2de Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Wed, 8 Feb 2017 17:51:42 +0100 Subject: [PATCH] Support PHP7.1 nullable types --- src/DefinitionResolver.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/DefinitionResolver.php b/src/DefinitionResolver.php index 3a8393a..cdbe68c 100644 --- a/src/DefinitionResolver.php +++ b/src/DefinitionResolver.php @@ -701,11 +701,21 @@ class DefinitionResolver * If it is unknown, will be Types\Mixed. * Returns null if the node does not have a type. * - * @param Node $node + * @param Node|string $node * @return \phpDocumentor\Type|null */ - public function getTypeFromNode(Node $node) + public function getTypeFromNode($node) { + if (is_string($node)) { + // Resolve a string like "bool" to a type object + return $this->typeResolver->resolve($node->returnType); + } + if ($node instanceof Node\Name) { + return new Types\Object_(new Fqsen('\\' . (string)$node)); + } + if ($node instanceof Node\NullableType) { + return new Types\Compound([new Types\Null_, $this->getTypeFromNode($node->type)]); + } if ($node instanceof Node\Param) { // Parameters $docBlock = $node->getAttribute('parentNode')->getAttribute('docBlock'); @@ -722,12 +732,7 @@ class DefinitionResolver } if ($node->type !== null) { // Use PHP7 return type hint - if (is_string($node->type)) { - // Resolve a string like "bool" to a type object - $type = $this->typeResolver->resolve($node->type); - } else { - $type = new Types\Object_(new Fqsen('\\' . (string)$node->type)); - } + return $this->getTypeFromNode($node->type); } if ($node->default !== null) { $defaultType = $this->resolveExpressionNodeToType($node->default); @@ -751,12 +756,7 @@ class DefinitionResolver return $returnTags[0]->getType(); } if ($node->returnType !== null) { - // Use PHP7 return type hint - if (is_string($node->returnType)) { - // Resolve a string like "bool" to a type object - return $this->typeResolver->resolve($node->returnType); - } - return new Types\Object_(new Fqsen('\\' . (string)$node->returnType)); + return $this->getTypeFromNode($node->returnType); } // Unknown return type return new Types\Mixed;