[ClassLoader] Fixed ClassMapGenerator and added suport for traits

This commit is contained in:
Martin Hasoň 2012-03-08 08:52:09 +01:00
parent f6353b8c7d
commit 8fb529c798
4 changed files with 49 additions and 6 deletions

View File

@ -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;

View File

@ -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()

View File

@ -1,4 +1,7 @@
<?php <?php
namespace {
class A {}
}
namespace Alpha { namespace Alpha {
class A {} class A {}

View File

@ -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;
}
}