[Debug] Deprecations exception for Symfony internals
This commit is contained in:
parent
4fd9792d02
commit
323e957b37
@ -180,16 +180,28 @@ class DebugClassLoader
|
|||||||
if (preg_match('#\n \* @deprecated (.*?)\r?\n \*(?: @|/$)#s', $refl->getDocComment(), $notice)) {
|
if (preg_match('#\n \* @deprecated (.*?)\r?\n \*(?: @|/$)#s', $refl->getDocComment(), $notice)) {
|
||||||
self::$deprecated[$name] = preg_replace('#\s*\r?\n \* +#', ' ', $notice[1]);
|
self::$deprecated[$name] = preg_replace('#\s*\r?\n \* +#', ' ', $notice[1]);
|
||||||
} else {
|
} else {
|
||||||
$len = 1 + (strpos($name, '\\', 1 + strpos($name, '\\')) ?: strpos($name, '_'));
|
if (2 > $len = 1 + (strpos($name, '\\', 1 + strpos($name, '\\')) ?: strpos($name, '_'))) {
|
||||||
|
$len = 0;
|
||||||
|
$ns = '';
|
||||||
|
} else {
|
||||||
|
switch ($ns = substr($name, 0, $len)) {
|
||||||
|
case 'Symfony\Bridge\\':
|
||||||
|
case 'Symfony\Bundle\\':
|
||||||
|
case 'Symfony\Component\\':
|
||||||
|
$ns = 'Symfony\\';
|
||||||
|
$len = strlen($ns);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
$parent = $refl->getParentClass();
|
$parent = $refl->getParentClass();
|
||||||
|
|
||||||
if (!$parent || $len < 2 || strncmp($name, $parent, $len)) {
|
if (!$parent || strncmp($ns, $parent, $len)) {
|
||||||
if ($parent && isset(self::$deprecated[$parent->name]) && ($len < 2 || strncmp($name, $parent->name, $len))) {
|
if ($parent && isset(self::$deprecated[$parent->name]) && strncmp($ns, $parent->name, $len)) {
|
||||||
trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent->name, self::$deprecated[$parent->name]), E_USER_DEPRECATED);
|
trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent->name, self::$deprecated[$parent->name]), E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($refl->getInterfaceNames() as $interface) {
|
foreach ($refl->getInterfaceNames() as $interface) {
|
||||||
if (isset(self::$deprecated[$interface]) && ($len < 2 || strncmp($name, $interface, $len)) && !($parent && $parent->implementsInterface($interface))) {
|
if (isset(self::$deprecated[$interface]) && strncmp($ns, $interface, $len) && !($parent && $parent->implementsInterface($interface))) {
|
||||||
trigger_error(sprintf('The %s %s %s that is deprecated %s', $name, $refl->isInterface() ? 'interface extends' : 'class implements', $interface, self::$deprecated[$interface]), E_USER_DEPRECATED);
|
trigger_error(sprintf('The %s %s %s that is deprecated %s', $name, $refl->isInterface() ? 'interface extends' : 'class implements', $interface, self::$deprecated[$interface]), E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,7 @@ class DebugClassLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$e = error_reporting(0);
|
$e = error_reporting(0);
|
||||||
trigger_error('', E_USER_NOTICE);
|
trigger_error('', E_USER_NOTICE);
|
||||||
|
|
||||||
class_exists(__NAMESPACE__.'\Fixtures\ExtendsDeprecatedParent', true);
|
class_exists('Symfony\Bridge\Debug\Tests\Fixtures\ExtendsDeprecatedParent', true);
|
||||||
|
|
||||||
error_reporting($e);
|
error_reporting($e);
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
@ -239,8 +239,8 @@ class ClassLoader
|
|||||||
return __DIR__.'/Fixtures/notPsr0Bis.php';
|
return __DIR__.'/Fixtures/notPsr0Bis.php';
|
||||||
} elseif (__NAMESPACE__.'\Fixtures\DeprecatedInterface' === $class) {
|
} elseif (__NAMESPACE__.'\Fixtures\DeprecatedInterface' === $class) {
|
||||||
return __DIR__.'/Fixtures/DeprecatedInterface.php';
|
return __DIR__.'/Fixtures/DeprecatedInterface.php';
|
||||||
} elseif (__NAMESPACE__.'\Fixtures\ExtendsDeprecatedParent' === $class) {
|
} elseif ('Symfony\Bridge\Debug\Tests\Fixtures\ExtendsDeprecatedParent' === $class) {
|
||||||
eval('namespace '.__NAMESPACE__.'\Fixtures; class ExtendsDeprecatedParent extends DeprecatedClass {}');
|
eval('namespace Symfony\Bridge\Debug\Tests\Fixtures; class ExtendsDeprecatedParent extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}');
|
||||||
} elseif ('Test\\'.__NAMESPACE__.'\DeprecatedParentClass' === $class) {
|
} elseif ('Test\\'.__NAMESPACE__.'\DeprecatedParentClass' === $class) {
|
||||||
eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedParentClass extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}');
|
eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedParentClass extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}');
|
||||||
} elseif ('Test\\'.__NAMESPACE__.'\DeprecatedInterfaceClass' === $class) {
|
} elseif ('Test\\'.__NAMESPACE__.'\DeprecatedInterfaceClass' === $class) {
|
||||||
|
Reference in New Issue
Block a user