1
0
Fork 0

Fix scanning of empty namespace{} blocks

pull/1253/head
Jordi Boggiano 2012-11-11 16:29:49 +01:00
parent 16da82db13
commit 5a763cf010
3 changed files with 15 additions and 10 deletions

View File

@ -92,10 +92,10 @@ class ClassMapGenerator
*/
private static function findClasses($path)
{
$contents = php_strip_whitespace($path);
$traits = version_compare(PHP_VERSION, '5.4', '<') ? '' : '|trait';
try {
$contents = php_strip_whitespace($path);
if (!preg_match('{\b(?:class|interface'.$traits.')\b}i', $contents)) {
return array();
}
@ -105,7 +105,12 @@ class ClassMapGenerator
// strip strings
$contents = preg_replace('{"[^"\\\\]*(\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(\\\\.[^\'\\\\]*)*\'}', 'null', $contents);
preg_match_all('{(?:\b(?<![\$:>])(?<type>class|interface'.$traits.')\s+(?<name>\S+)|\b(?<![\$:>])(?<ns>namespace)(?<nsname>\s+[^\s;{}\\\\]+(?:\s*\\\\\s*[^\s;{}\\\\]+)*|\s*\{))}i', $contents, $matches);
preg_match_all('{
(?:
\b(?<![\$:>])(?<type>class|interface'.$traits.') \s+ (?<name>\S+)
| \b(?<![\$:>])(?<ns>namespace) (?<nsname>\s+[^\s;{}\\\\]+(?:\s*\\\\\s*[^\s;{}\\\\]+)*)? \s*[\{;]
)
}ix', $contents, $matches);
$classes = array();
$namespace = '';

View File

@ -44,11 +44,11 @@ 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',
'Beta\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
'A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
'Be\\ta\\A' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
'Be\\ta\\B' => realpath(__DIR__).'/Fixtures/classmap/multipleNs.php',
'ClassMap\\SomeInterface' => realpath(__DIR__).'/Fixtures/classmap/SomeInterface.php',
'ClassMap\\SomeParent' => realpath(__DIR__).'/Fixtures/classmap/SomeParent.php',
'ClassMap\\SomeClass' => realpath(__DIR__).'/Fixtures/classmap/SomeClass.php',

View File

@ -1,14 +1,14 @@
<?php
namespace {
class A {}
}
namespace Alpha {
class A {}
class B {}
}
namespace Beta {
namespace {
class A {}
}
namespace Be \ ta {
class A {}
class B {}
}