Skip to content

Commit 4897038

Browse files
authored
Merge pull request #67 from Fedott/dev-fix-namespace-with-starting-slash
Fixed namespaces with starting slash
2 parents b996fd3 + 6c02632 commit 4897038

5 files changed

+53
-1
lines changed

src/ReflectionEngine.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ public static function parseFile($fileName, $fileContent = null)
229229
* @param string $namespaceName Namespace name
230230
*
231231
* @return Namespace_
232+
* @throws ReflectionException
232233
*/
233234
public static function parseFileNamespace($fileName, $namespaceName)
234235
{
@@ -239,7 +240,7 @@ public static function parseFileNamespace($fileName, $namespaceName)
239240
continue;
240241
}
241242
$topLevelNodeName = $topLevelNode->name ? $topLevelNode->name->toString() : '';
242-
if ($topLevelNodeName === $namespaceName) {
243+
if (ltrim($topLevelNodeName, '\\') === trim($namespaceName, '\\')) {
243244
return $topLevelNode;
244245
}
245246
}

tests/ReflectionFileTest.php

+19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22
namespace Go\ParserReflection;
33

4+
use Stub\Issue44\Locator;
5+
46
class ReflectionFileTest extends \PHPUnit_Framework_TestCase
57
{
68
const STUB_FILE = '/Stub/FileWithNamespaces.php';
@@ -84,4 +86,21 @@ public function fileNameProvider()
8486
'/Stub/FileWithGlobalNamespace.php' => ['/Stub/FileWithGlobalNamespace.php', true],
8587
];
8688
}
89+
90+
public function testGetInterfaceNamesWithExtends()
91+
{
92+
$fileName = __DIR__ . '/Stub/Issue44/ClassWithoutNamespace.php';
93+
94+
require_once __DIR__ . '/Stub/Issue44/Locator.php';
95+
ReflectionEngine::init(new Locator());
96+
97+
$reflectedFile = new ReflectionFile($fileName);
98+
$namespaces = $reflectedFile->getFileNamespaces();
99+
$namespace = array_pop($namespaces);
100+
$classes = $namespace->getClasses();
101+
$class = array_pop($classes);
102+
103+
$interfaceNames = $class->getInterfaceNames();
104+
$this->assertEquals([], $interfaceNames);
105+
}
87106
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Stub\Issue44;
4+
5+
class ClassWithNamespace
6+
{
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
class ClassWithoutNamespace extends Stub\Issue44\ClassWithNamespace
4+
{
5+
}

tests/Stub/Issue44/Locator.php

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Stub\Issue44;
4+
5+
use Go\ParserReflection\LocatorInterface;
6+
7+
class Locator implements LocatorInterface
8+
{
9+
/**
10+
* @inheritdoc
11+
*/
12+
public function locateClass($className)
13+
{
14+
if ($className === '\\Stub\\Issue44\\ClassWithNamespace') {
15+
return __DIR__ . '/ClassWithNamespace.php';
16+
}
17+
18+
return false;
19+
}
20+
}

0 commit comments

Comments
 (0)