Skip to content

Commit 1c9fdcd

Browse files
committed
Moved and renamed resolvers, started on README
1 parent 1fc3b8a commit 1c9fdcd

File tree

4 files changed

+49
-30
lines changed

4 files changed

+49
-30
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
TypeResolver and FqsenResolver
2+
==============================
3+
4+
The specification on types in DocBlocks (PSR-5) describes various keywords and special constructs
5+
but also how to statically resolve the partial name of a Class into a Fully Qualified Class Name (FQCN).
6+
7+
PSR-5 also introduces an additional way to describe deeper elements than Classes, Interfaces and Traits
8+
called the Fully Qualified Structural Element Name (FQSEN). Using this it is possible to refer to methods,
9+
properties and class constants but also functions and global constants.
10+
11+
This package provides two Resolvers that are capable of
12+
13+
1. determining the Type of a given expression and/or resolve any class names, and
14+
2. resolve any partial Structural Element Names into Fully Qualified Structural Element names

src/FqsenFactory.php renamed to src/FqsenResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
use phpDocumentor\Reflection\Types\Context;
1616

17-
class FqsenFactory
17+
class FqsenResolver
1818
{
1919
/** @var string Definition of the NAMESPACE operator in PHP */
2020
const OPERATOR_NAMESPACE = '\\';

src/Types/Resolver.php renamed to src/TypeResolver.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
* @link http://phpdoc.org
1111
*/
1212

13-
namespace phpDocumentor\Reflection\Types;
13+
namespace phpDocumentor\Reflection;
1414

15-
use phpDocumentor\Reflection\FqsenFactory;
16-
use phpDocumentor\Reflection\Type;
15+
use phpDocumentor\Reflection\Types\Array_;
16+
use phpDocumentor\Reflection\Types\Compound;
17+
use phpDocumentor\Reflection\Types\Context;
18+
use phpDocumentor\Reflection\Types\Object_;
1719

18-
final class Resolver
20+
final class TypeResolver
1921
{
2022
/** @var string Definition of the ARRAY operator for types */
2123
const OPERATOR_ARRAY = '[]';
@@ -48,17 +50,17 @@ final class Resolver
4850
'static' => 'phpDocumentor\Reflection\Types\Static_'
4951
);
5052

51-
/** @var FqsenFactory */
52-
private $fqsenFactory;
53+
/** @var FqsenResolver */
54+
private $fqsenResolver;
5355

5456
/**
5557
* Initializes this TypeResolver with the means to create and resolve Fqsen objects.
5658
*
57-
* @param FqsenFactory $fqsenFactory
59+
* @param FqsenResolver $fqsenResolver
5860
*/
59-
public function __construct(FqsenFactory $fqsenFactory = null)
61+
public function __construct(FqsenResolver $fqsenResolver = null)
6062
{
61-
$this->fqsenFactory = $fqsenFactory ?: new FqsenFactory();
63+
$this->fqsenResolver = $fqsenResolver ?: new FqsenResolver();
6264
}
6365

6466
/**
@@ -136,7 +138,7 @@ public function resolveFqsen($fqsen, Context $context = null)
136138
throw new \InvalidArgumentException('Attempted to resolve "' . $fqsen . '" but it appears to be empty');
137139
}
138140

139-
return $this->fqsenFactory->create($fqsen, $context);
141+
return $this->fqsenResolver->create($fqsen, $context);
140142
}
141143
/**
142144
* Adds a keyword to the list of Keywords and associates it with a specific Value Object.
@@ -260,7 +262,7 @@ private function resolveKeyword($type)
260262
*/
261263
private function resolveTypedObject($type, Context $context = null)
262264
{
263-
return new Object_($this->fqsenFactory->create($type, $context));
265+
return new Object_($this->fqsenResolver->create($type, $context));
264266
}
265267

266268
/**
@@ -274,7 +276,7 @@ private function resolveTypedObject($type, Context $context = null)
274276
*/
275277
private function resolvePartialStructuralElementName($type, Context $context = null)
276278
{
277-
return new Object_($this->fqsenFactory->create($type, $context));
279+
return new Object_($this->fqsenResolver->create($type, $context));
278280
}
279281

280282
/**

tests/unit/Types/ResolverTest.php renamed to tests/unit/TypeResolverTest.php

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@
1010
* @link http://phpdoc.org
1111
*/
1212

13-
namespace phpDocumentor\Reflection\Types;
13+
namespace phpDocumentor\Reflection;
1414

1515
use Mockery as m;
16-
use phpDocumentor\Reflection\Type;
16+
use phpDocumentor\Reflection\Types\Array_;
17+
use phpDocumentor\Reflection\Types\Compound;
18+
use phpDocumentor\Reflection\Types\Context;
19+
use phpDocumentor\Reflection\Types\Object_;
1720

1821
/**
19-
* @coversDefaultClass phpDocumentor\Reflection\Types\Resolver
22+
* @coversDefaultClass phpDocumentor\Reflection\TypeResolver
2023
*/
21-
class ResolverTest extends \PHPUnit_Framework_TestCase
24+
class TypeResolverTest extends \PHPUnit_Framework_TestCase
2225
{
2326
/**
2427
* @param string $keyword
@@ -35,7 +38,7 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
3538
*/
3639
public function testResolvingKeywords($keyword, $expectedClass)
3740
{
38-
$fixture = new Resolver();
41+
$fixture = new TypeResolver();
3942

4043
$resolvedType = $fixture->resolveType($keyword, new Context(''));
4144

@@ -56,7 +59,7 @@ public function testResolvingKeywords($keyword, $expectedClass)
5659
*/
5760
public function testResolvingFQSENs($fqsen)
5861
{
59-
$fixture = new Resolver();
62+
$fixture = new TypeResolver();
6063

6164
/** @var Object_ $resolvedType */
6265
$resolvedType = $fixture->resolveType($fqsen, new Context(''));
@@ -77,7 +80,7 @@ public function testResolvingFQSENs($fqsen)
7780
*/
7881
public function testResolvingRelativeQSENsBasedOnNamespace()
7982
{
80-
$fixture = new Resolver();
83+
$fixture = new TypeResolver();
8184

8285
/** @var Object_ $resolvedType */
8386
$resolvedType = $fixture->resolveType('DocBlock', new Context('phpDocumentor\Reflection'));
@@ -97,7 +100,7 @@ public function testResolvingRelativeQSENsBasedOnNamespace()
97100
*/
98101
public function testResolvingRelativeQSENsBasedOnNamespaceAlias()
99102
{
100-
$fixture = new Resolver();
103+
$fixture = new TypeResolver();
101104

102105
/** @var Object_ $resolvedType */
103106
$resolvedType = $fixture->resolveType(
@@ -120,7 +123,7 @@ public function testResolvingRelativeQSENsBasedOnNamespaceAlias()
120123
*/
121124
public function testResolvingTypedArrays()
122125
{
123-
$fixture = new Resolver();
126+
$fixture = new TypeResolver();
124127

125128
/** @var Array_ $resolvedType */
126129
$resolvedType = $fixture->resolveType('string[]', new Context(''));
@@ -141,7 +144,7 @@ public function testResolvingTypedArrays()
141144
*/
142145
public function testResolvingNestedTypedArrays()
143146
{
144-
$fixture = new Resolver();
147+
$fixture = new TypeResolver();
145148

146149
/** @var Array_ $resolvedType */
147150
$resolvedType = $fixture->resolveType('string[][]', new Context(''));
@@ -172,7 +175,7 @@ public function testResolvingNestedTypedArrays()
172175
*/
173176
public function testResolvingCompoundTypes()
174177
{
175-
$fixture = new Resolver();
178+
$fixture = new TypeResolver();
176179

177180
/** @var Compound $resolvedType */
178181
$resolvedType = $fixture->resolveType('string|Reflection\DocBlock', new Context('phpDocumentor'));
@@ -210,7 +213,7 @@ public function testResolvingCompoundTypes()
210213
*/
211214
public function testResolvingCompoundTypesWithTwoArrays()
212215
{
213-
$fixture = new Resolver();
216+
$fixture = new TypeResolver();
214217

215218
/** @var Compound $resolvedType */
216219
$resolvedType = $fixture->resolveType('integer[]|string[]', new Context(''));
@@ -242,7 +245,7 @@ public function testAddingAKeyword()
242245
$typeMock = m::mock(Type::class);
243246

244247
// Act
245-
$fixture = new Resolver();
248+
$fixture = new TypeResolver();
246249
$fixture->addKeyword('mock', get_class($typeMock));
247250

248251
// Assert
@@ -258,7 +261,7 @@ public function testAddingAKeyword()
258261
*/
259262
public function testAddingAKeywordFailsIfTypeClassDoesNotExist()
260263
{
261-
$fixture = new Resolver();
264+
$fixture = new TypeResolver();
262265
$fixture->addKeyword('mock', 'IDoNotExist');
263266
}
264267

@@ -269,7 +272,7 @@ public function testAddingAKeywordFailsIfTypeClassDoesNotExist()
269272
*/
270273
public function testAddingAKeywordFailsIfTypeClassDoesNotImplementTypeInterface()
271274
{
272-
$fixture = new Resolver();
275+
$fixture = new TypeResolver();
273276
$fixture->addKeyword('mock', 'stdClass');
274277
}
275278

@@ -281,7 +284,7 @@ public function testAddingAKeywordFailsIfTypeClassDoesNotImplementTypeInterface(
281284
*/
282285
public function testExceptionIsThrownIfTypeIsEmpty()
283286
{
284-
$fixture = new Resolver();
287+
$fixture = new TypeResolver();
285288
$fixture->resolveType(' ', new Context(''));
286289
}
287290

@@ -293,7 +296,7 @@ public function testExceptionIsThrownIfTypeIsEmpty()
293296
*/
294297
public function testExceptionIsThrownIfTypeIsNotAString()
295298
{
296-
$fixture = new Resolver();
299+
$fixture = new TypeResolver();
297300
$fixture->resolveType(['a'], new Context(''));
298301
}
299302

0 commit comments

Comments
 (0)