diff --git a/src/Symfony/Component/ClassLoader/ClassMapGenerator.php b/src/Symfony/Component/ClassLoader/ClassMapGenerator.php index b3f3afa7cc..c0e9fc6d50 100644 --- a/src/Symfony/Component/ClassLoader/ClassMapGenerator.php +++ b/src/Symfony/Component/ClassLoader/ClassMapGenerator.php @@ -84,6 +84,7 @@ class ClassMapGenerator { $contents = file_get_contents($path); $tokens = token_get_all($contents); + $T_TRAIT = version_compare(PHP_VERSION, '5.4', '<') ? -1 : T_TRAIT; $classes = array(); @@ -110,6 +111,7 @@ class ClassMapGenerator break; case T_CLASS: case T_INTERFACE: + case $T_TRAIT: // Find the classname while (($t = $tokens[++$i]) && is_array($t)) { if (T_STRING === $t[0]) { @@ -119,11 +121,7 @@ class ClassMapGenerator } } - if (empty($namespace)) { - $classes[] = $class; - } else { - $classes[] = $namespace . $class; - } + $classes[] = ltrim($namespace . $class, '\\'); break; default: break; diff --git a/tests/Symfony/Tests/Component/ClassLoader/ClassMapGeneratorTest.php b/tests/Symfony/Tests/Component/ClassLoader/ClassMapGeneratorTest.php index 7154539839..abb1c5eff0 100644 --- a/tests/Symfony/Tests/Component/ClassLoader/ClassMapGeneratorTest.php +++ b/tests/Symfony/Tests/Component/ClassLoader/ClassMapGeneratorTest.php @@ -26,7 +26,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase public function getTestCreateMapTests() { - return array( + $data = array( array(__DIR__.'/Fixtures/Namespaced', array( 'Namespaced\\Bar' => realpath(__DIR__).'/Fixtures/Namespaced/Bar.php', 'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php', @@ -45,6 +45,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase array(__DIR__.'/Fixtures/classmap', array( 'Foo\\Bar\\A' => 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\\B' => 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', )), ); + + if (version_compare(PHP_VERSION, '5.4', '>=')) { + $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() diff --git a/tests/Symfony/Tests/Component/ClassLoader/Fixtures/classmap/multipleNs.php b/tests/Symfony/Tests/Component/ClassLoader/Fixtures/classmap/multipleNs.php index 27f96f704c..d19e07fc11 100644 --- a/tests/Symfony/Tests/Component/ClassLoader/Fixtures/classmap/multipleNs.php +++ b/tests/Symfony/Tests/Component/ClassLoader/Fixtures/classmap/multipleNs.php @@ -1,4 +1,7 @@