mirror of
https://github.com/barryvdh/ReflectionDocBlock.git
synced 2026-08-18 18:13:13 +00:00
Reverted the move of explode() into Return, and moved the implode() into Collection's new __toString() method instead;
Also had to made type resolution lazy, as a pleasant side effect.
This reverts commit db20ae39fb.
This commit is contained in:
@@ -14,6 +14,7 @@ namespace phpDocumentor\Reflection\DocBlock\Tag;
|
|||||||
|
|
||||||
use phpDocumentor\Reflection\DocBlock;
|
use phpDocumentor\Reflection\DocBlock;
|
||||||
use phpDocumentor\Reflection\DocBlock\Tag;
|
use phpDocumentor\Reflection\DocBlock\Tag;
|
||||||
|
use phpDocumentor\Reflection\DocBlock\Type\Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reflection class for a @return tag in a Docblock.
|
* Reflection class for a @return tag in a Docblock.
|
||||||
@@ -24,9 +25,12 @@ use phpDocumentor\Reflection\DocBlock\Tag;
|
|||||||
*/
|
*/
|
||||||
class ReturnTag extends Tag
|
class ReturnTag extends Tag
|
||||||
{
|
{
|
||||||
/** @var string */
|
/** @var string The raw type component. */
|
||||||
protected $type = '';
|
protected $type = '';
|
||||||
|
|
||||||
|
/** @var Collection The parsed type component. */
|
||||||
|
protected $types = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a tag and populates the member variables.
|
* Parses a tag and populates the member variables.
|
||||||
*
|
*
|
||||||
@@ -52,13 +56,8 @@ class ReturnTag extends Tag
|
|||||||
*/
|
*/
|
||||||
public function getTypes()
|
public function getTypes()
|
||||||
{
|
{
|
||||||
$types = new \phpDocumentor\Reflection\DocBlock\Type\Collection(
|
$this->refreshTypes();
|
||||||
explode('|', $this->type),
|
return $this->types->getArrayCopy();
|
||||||
$this->docblock ? $this->docblock->getNamespace() : null,
|
|
||||||
$this->docblock ? $this->docblock->getNamespaceAliases() : array()
|
|
||||||
);
|
|
||||||
|
|
||||||
return $types->getArrayCopy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -68,6 +67,23 @@ class ReturnTag extends Tag
|
|||||||
*/
|
*/
|
||||||
public function getType()
|
public function getType()
|
||||||
{
|
{
|
||||||
return implode('|', $this->getTypes());
|
$this->refreshTypes();
|
||||||
|
return (string) $this->types;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the type, if needed.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function refreshTypes()
|
||||||
|
{
|
||||||
|
if (null === $this->types) {
|
||||||
|
$this->types = new Collection(
|
||||||
|
array($this->type),
|
||||||
|
$this->docblock ? $this->docblock->getNamespace() : null,
|
||||||
|
$this->docblock ? $this->docblock->getNamespaceAliases() : array()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ namespace phpDocumentor\Reflection\DocBlock\Type;
|
|||||||
*/
|
*/
|
||||||
class Collection extends \ArrayObject
|
class Collection extends \ArrayObject
|
||||||
{
|
{
|
||||||
|
/** @var string Definition of the OR operator for types */
|
||||||
|
const OPERATOR_OR = '|';
|
||||||
|
|
||||||
/** @var string Definition of the ARRAY operator for types */
|
/** @var string Definition of the ARRAY operator for types */
|
||||||
const OPERATOR_ARRAY = '[]';
|
const OPERATOR_ARRAY = '[]';
|
||||||
|
|
||||||
@@ -164,12 +167,28 @@ class Collection extends \ArrayObject
|
|||||||
.var_export($type, true)
|
.var_export($type, true)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$expanded_type = $this->expand($type);
|
|
||||||
if ($expanded_type) {
|
// separate the type by the OR operator
|
||||||
$this[] = $expanded_type;
|
$type_parts = explode(self::OPERATOR_OR, $type);
|
||||||
|
foreach ($type_parts as $part) {
|
||||||
|
$expanded_type = $this->expand($part);
|
||||||
|
if ($expanded_type) {
|
||||||
|
$this[] = $expanded_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string representation of the collection.
|
||||||
|
*
|
||||||
|
* @return string The resolved types across the collection, separated with
|
||||||
|
* {@link self::OPERATOR_OR}.
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return implode(self::OPERATOR_OR, $this->getArrayCopy());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Analyzes the given type and returns the FQCN variant.
|
* Analyzes the given type and returns the FQCN variant.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -148,9 +148,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
$collection = new Collection();
|
$collection = new Collection();
|
||||||
$collection->setNamespace('\My\Space');
|
$collection->setNamespace('\My\Space');
|
||||||
$collection->setNamespaceAliases(array('Alias' => '\My\Space\Aliasing'));
|
$collection->setNamespaceAliases(array('Alias' => '\My\Space\Aliasing'));
|
||||||
foreach ($fixture as $type) {
|
$collection->add($fixture);
|
||||||
$collection->add($type);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->assertSame($expected, $collection->getArrayCopy());
|
$this->assertSame($expected, $collection->getArrayCopy());
|
||||||
}
|
}
|
||||||
@@ -168,9 +166,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
$collection = new Collection();
|
$collection = new Collection();
|
||||||
$collection->setNamespaceAliases(array('Alias' => '\My\Space\Aliasing'));
|
$collection->setNamespaceAliases(array('Alias' => '\My\Space\Aliasing'));
|
||||||
foreach ($fixture as $type) {
|
$collection->add($fixture);
|
||||||
$collection->add($type);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->assertSame($expected, $collection->getArrayCopy());
|
$this->assertSame($expected, $collection->getArrayCopy());
|
||||||
}
|
}
|
||||||
@@ -199,34 +195,34 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
public function provideTypesToExpand($method, $namespace = '\My\Space\\')
|
public function provideTypesToExpand($method, $namespace = '\My\Space\\')
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
array(array(''), array()),
|
array('', array()),
|
||||||
array(array(' '), array()),
|
array(' ', array()),
|
||||||
array(array('int'), array('int')),
|
array('int', array('int')),
|
||||||
array(array('int '), array('int')),
|
array('int ', array('int')),
|
||||||
array(array('string'), array('string')),
|
array('string', array('string')),
|
||||||
array(array('DocBlock'), array($namespace.'DocBlock')),
|
array('DocBlock', array($namespace.'DocBlock')),
|
||||||
array(array('DocBlock[]'), array($namespace.'DocBlock[]')),
|
array('DocBlock[]', array($namespace.'DocBlock[]')),
|
||||||
array(array(' DocBlock '), array($namespace.'DocBlock')),
|
array(' DocBlock ', array($namespace.'DocBlock')),
|
||||||
array(array('\My\Space\DocBlock'), array('\My\Space\DocBlock')),
|
array('\My\Space\DocBlock', array('\My\Space\DocBlock')),
|
||||||
array(array('Alias\DocBlock'), array('\My\Space\Aliasing\DocBlock')),
|
array('Alias\DocBlock', array('\My\Space\Aliasing\DocBlock')),
|
||||||
array(
|
array(
|
||||||
array('DocBlock', 'Tag'),
|
'DocBlock|Tag',
|
||||||
array($namespace .'DocBlock', $namespace .'Tag')
|
array($namespace .'DocBlock', $namespace .'Tag')
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('DocBlock', 'null'),
|
'DocBlock|null',
|
||||||
array($namespace.'DocBlock', 'null')
|
array($namespace.'DocBlock', 'null')
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('\My\Space\DocBlock', 'Tag'),
|
'\My\Space\DocBlock|Tag',
|
||||||
array('\My\Space\DocBlock', $namespace.'Tag')
|
array('\My\Space\DocBlock', $namespace.'Tag')
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('DocBlock[]', 'null'),
|
'DocBlock[]|null',
|
||||||
array($namespace.'DocBlock[]', 'null')
|
array($namespace.'DocBlock[]', 'null')
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array('DocBlock[]', 'int[]'),
|
'DocBlock[]|int[]',
|
||||||
array($namespace.'DocBlock[]', 'int[]')
|
array($namespace.'DocBlock[]', 'int[]')
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user