[ClassLoader] Fix undefined index in ClassCollectionLoader
This commit is contained in:
parent
15551f2e85
commit
cfdb925c47
@ -353,6 +353,8 @@ class ClassCollectionLoader
|
|||||||
$unresolved = new \ArrayObject();
|
$unresolved = new \ArrayObject();
|
||||||
}
|
}
|
||||||
$nodeName = $node->getName();
|
$nodeName = $node->getName();
|
||||||
|
|
||||||
|
if (isset($tree[$nodeName])) {
|
||||||
$unresolved[$nodeName] = $node;
|
$unresolved[$nodeName] = $node;
|
||||||
foreach ($tree[$nodeName] as $dependency) {
|
foreach ($tree[$nodeName] as $dependency) {
|
||||||
if (!$resolved->offsetExists($dependency->getName())) {
|
if (!$resolved->offsetExists($dependency->getName())) {
|
||||||
@ -361,6 +363,7 @@ class ClassCollectionLoader
|
|||||||
}
|
}
|
||||||
$resolved[$nodeName] = $node;
|
$resolved[$nodeName] = $node;
|
||||||
unset($unresolved[$nodeName]);
|
unset($unresolved[$nodeName]);
|
||||||
|
}
|
||||||
|
|
||||||
return $resolved;
|
return $resolved;
|
||||||
}
|
}
|
||||||
|
@ -146,6 +146,38 @@ class ClassCollectionLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFixClassWithTraitsOrdering()
|
||||||
|
{
|
||||||
|
if (PHP_VERSION_ID < 50400) {
|
||||||
|
$this->markTestSkipped('Requires PHP > 5.4');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once __DIR__.'/Fixtures/ClassesWithParents/CTrait.php';
|
||||||
|
require_once __DIR__.'/Fixtures/ClassesWithParents/F.php';
|
||||||
|
require_once __DIR__.'/Fixtures/ClassesWithParents/G.php';
|
||||||
|
|
||||||
|
$classes = array(
|
||||||
|
'ClassesWithParents\\F',
|
||||||
|
'ClassesWithParents\\G',
|
||||||
|
);
|
||||||
|
|
||||||
|
$expected = array(
|
||||||
|
'ClassesWithParents\\CTrait',
|
||||||
|
'ClassesWithParents\\F',
|
||||||
|
'ClassesWithParents\\G',
|
||||||
|
);
|
||||||
|
|
||||||
|
$r = new \ReflectionClass('Symfony\Component\ClassLoader\ClassCollectionLoader');
|
||||||
|
$m = $r->getMethod('getOrderedClasses');
|
||||||
|
$m->setAccessible(true);
|
||||||
|
|
||||||
|
$ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', $classes);
|
||||||
|
|
||||||
|
$this->assertEquals($expected, array_map(function ($class) { return $class->getName(); }, $ordered));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider getFixNamespaceDeclarationsData
|
* @dataProvider getFixNamespaceDeclarationsData
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ClassesWithParents;
|
||||||
|
|
||||||
|
class F
|
||||||
|
{
|
||||||
|
use CTrait;
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ClassesWithParents;
|
||||||
|
|
||||||
|
class G
|
||||||
|
{
|
||||||
|
use CTrait;
|
||||||
|
}
|
Reference in New Issue
Block a user