[ClassLoader] Fixed ClassMapGenerator and added suport for traits
This commit is contained in:
parent
f6353b8c7d
commit
8fb529c798
@ -84,6 +84,7 @@ class ClassMapGenerator
|
|||||||
{
|
{
|
||||||
$contents = file_get_contents($path);
|
$contents = file_get_contents($path);
|
||||||
$tokens = token_get_all($contents);
|
$tokens = token_get_all($contents);
|
||||||
|
$T_TRAIT = version_compare(PHP_VERSION, '5.4.0RC1', '<') ? -1 : T_TRAIT;
|
||||||
|
|
||||||
$classes = array();
|
$classes = array();
|
||||||
|
|
||||||
@ -110,6 +111,7 @@ class ClassMapGenerator
|
|||||||
break;
|
break;
|
||||||
case T_CLASS:
|
case T_CLASS:
|
||||||
case T_INTERFACE:
|
case T_INTERFACE:
|
||||||
|
case $T_TRAIT:
|
||||||
// Find the classname
|
// Find the classname
|
||||||
while (($t = $tokens[++$i]) && is_array($t)) {
|
while (($t = $tokens[++$i]) && is_array($t)) {
|
||||||
if (T_STRING === $t[0]) {
|
if (T_STRING === $t[0]) {
|
||||||
@ -119,11 +121,7 @@ class ClassMapGenerator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($namespace)) {
|
$classes[] = ltrim($namespace . $class, '\\');
|
||||||
$classes[] = $class;
|
|
||||||
} else {
|
|
||||||
$classes[] = $namespace . $class;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -26,7 +26,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function getTestCreateMapTests()
|
public function getTestCreateMapTests()
|
||||||
{
|
{
|
||||||
return array(
|
$data = array(
|
||||||
array(__DIR__.'/Fixtures/Namespaced', array(
|
array(__DIR__.'/Fixtures/Namespaced', array(
|
||||||
'Namespaced\\Bar' => realpath(__DIR__).'/Fixtures/Namespaced/Bar.php',
|
'Namespaced\\Bar' => realpath(__DIR__).'/Fixtures/Namespaced/Bar.php',
|
||||||
'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php',
|
'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php',
|
||||||
@ -45,6 +45,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(__DIR__.'/Fixtures/classmap', array(
|
array(__DIR__.'/Fixtures/classmap', array(
|
||||||
'Foo\\Bar\\A' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php',
|
'Foo\\Bar\\A' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php',
|
||||||
'Foo\\Bar\\B' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php',
|
'Foo\\Bar\\B' => realpath(__DIR__).'/Fixtures/classmap/sameNsMultipleClasses.php',
|
||||||
|
'A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
||||||
'Alpha\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
'Alpha\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
||||||
'Alpha\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
'Alpha\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
||||||
'Beta\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
'Beta\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
|
||||||
@ -54,6 +55,19 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
|||||||
'ClassMap\\SomeClass' => realpath(__DIR__).'/Fixtures/classmap/SomeClass.php',
|
'ClassMap\\SomeClass' => realpath(__DIR__).'/Fixtures/classmap/SomeClass.php',
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.4.0RC1', '>=')) {
|
||||||
|
$data[] = array(__DIR__.'/Fixtures/php5.4', array(
|
||||||
|
'TFoo' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
'CFoo' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
'Foo\\TBar' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
'Foo\\IBar' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
'Foo\\TFooBar' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
'Foo\\CBar' => __DIR__.'/Fixtures/php5.4/traits.php',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCreateMapFinderSupport()
|
public function testCreateMapFinderSupport()
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
namespace {
|
||||||
|
class A {}
|
||||||
|
}
|
||||||
|
|
||||||
namespace Alpha {
|
namespace Alpha {
|
||||||
class A {}
|
class A {}
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
namespace {
|
||||||
|
trait TFoo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class CFoo {
|
||||||
|
use TFoo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Foo {
|
||||||
|
trait TBar {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IBar {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
trait TFooBar {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class CBar implements IBar {
|
||||||
|
use TBar, TFooBar;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user