From 8a37722adbbbd27e3356395c9262921f88971458 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 20 Jan 2017 10:53:58 +0100 Subject: [PATCH] [ClassLoader] Deprecated the component --- UPGRADE-3.3.md | 3 +-- UPGRADE-4.0.md | 3 +-- .../Controller/ControllerNameParserTest.php | 11 +++----- .../Component/ClassLoader/CHANGELOG.md | 3 +-- .../Component/ClassLoader/ClassLoader.php | 4 +++ .../ClassLoader/ClassMapGenerator.php | 4 +++ .../Component/ClassLoader/MapClassLoader.php | 4 +++ .../Component/ClassLoader/Psr4ClassLoader.php | 4 +++ .../ClassLoader/Tests/ClassLoaderTest.php | 3 +++ .../Tests/ClassMapGeneratorTest.php | 3 +++ .../ClassLoader/Tests/Psr4ClassLoaderTest.php | 3 +++ .../ClassNotFoundFatalErrorHandlerTest.php | 11 +++----- src/Symfony/Component/Debug/composer.json | 1 - src/Symfony/Component/HttpKernel/Client.php | 25 ++++++++++++------- 14 files changed, 52 insertions(+), 30 deletions(-) diff --git a/UPGRADE-3.3.md b/UPGRADE-3.3.md index a7ad71a426..76f52288b3 100644 --- a/UPGRADE-3.3.md +++ b/UPGRADE-3.3.md @@ -4,8 +4,7 @@ UPGRADE FROM 3.2 to 3.3 ClassLoader ----------- - * The ApcClassLoader, WinCacheClassLoader and XcacheClassLoader classes have been deprecated - in favor of the `--apcu-autoloader` option introduced in composer 1.3 + * The component is deprecated and will be removed in 4.0. Use Composer instead. DependencyInjection ------------------- diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index 085f0204d0..4c96abd5a6 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -4,8 +4,7 @@ UPGRADE FROM 3.x to 4.0 ClassLoader ----------- - * The ApcClassLoader, WinCacheClassLoader and XcacheClassLoader classes have been removed - in favor of the `--apcu-autoloader` option introduced in composer 1.3 + * The component has been removed. Use Composer instead. Console ------- diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerNameParserTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerNameParserTest.php index 2fe271663e..57eaf269f4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerNameParserTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerNameParserTest.php @@ -11,9 +11,9 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\Controller; +use Composer\Autoload\ClassLoader; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; -use Symfony\Component\ClassLoader\ClassLoader; class ControllerNameParserTest extends TestCase { @@ -22,17 +22,14 @@ class ControllerNameParserTest extends TestCase protected function setUp() { $this->loader = new ClassLoader(); - $this->loader->addPrefixes(array( - 'TestBundle' => __DIR__.'/../Fixtures', - 'TestApplication' => __DIR__.'/../Fixtures', - )); + $this->loader->add('TestBundle', __DIR__.'/../Fixtures'); + $this->loader->add('TestApplication', __DIR__.'/../Fixtures'); $this->loader->register(); } protected function tearDown() { - spl_autoload_unregister(array($this->loader, 'loadClass')); - + $this->loader->unregister(); $this->loader = null; } diff --git a/src/Symfony/Component/ClassLoader/CHANGELOG.md b/src/Symfony/Component/ClassLoader/CHANGELOG.md index 1753ce6c3d..203ec9eede 100644 --- a/src/Symfony/Component/ClassLoader/CHANGELOG.md +++ b/src/Symfony/Component/ClassLoader/CHANGELOG.md @@ -4,8 +4,7 @@ CHANGELOG 3.3.0 ----- - * The ApcClassLoader, WinCacheClassLoader and XcacheClassLoader classes have been deprecated - in favor of the `--apcu-autoloader` option introduced in composer 1.3 + * deprecated the component: use Composer instead 3.0.0 ----- diff --git a/src/Symfony/Component/ClassLoader/ClassLoader.php b/src/Symfony/Component/ClassLoader/ClassLoader.php index a506dc0941..0a72d2833a 100644 --- a/src/Symfony/Component/ClassLoader/ClassLoader.php +++ b/src/Symfony/Component/ClassLoader/ClassLoader.php @@ -11,6 +11,8 @@ namespace Symfony\Component\ClassLoader; +@trigger_error('The '.__NAMESPACE__.'\ClassLoader class is deprecated since version 3.3 and will be removed in 4.0. Use Composer instead.', E_USER_DEPRECATED); + /** * ClassLoader implements an PSR-0 class loader. * @@ -36,6 +38,8 @@ namespace Symfony\Component\ClassLoader; * * @author Fabien Potencier * @author Jordi Boggiano + * + * @deprecated since version 3.3, to be removed in 4.0. */ class ClassLoader { diff --git a/src/Symfony/Component/ClassLoader/ClassMapGenerator.php b/src/Symfony/Component/ClassLoader/ClassMapGenerator.php index 810a70b6d2..69df0e1f41 100644 --- a/src/Symfony/Component/ClassLoader/ClassMapGenerator.php +++ b/src/Symfony/Component/ClassLoader/ClassMapGenerator.php @@ -11,10 +11,14 @@ namespace Symfony\Component\ClassLoader; +@trigger_error('The '.__NAMESPACE__.'\ClassMapGenerator class is deprecated since version 3.3 and will be removed in 4.0. Use Composer instead.', E_USER_DEPRECATED); + /** * ClassMapGenerator. * * @author Gyula Sallai + * + * @deprecated since version 3.3, to be removed in 4.0. */ class ClassMapGenerator { diff --git a/src/Symfony/Component/ClassLoader/MapClassLoader.php b/src/Symfony/Component/ClassLoader/MapClassLoader.php index 1d8bcc2a02..43f1cd03e3 100644 --- a/src/Symfony/Component/ClassLoader/MapClassLoader.php +++ b/src/Symfony/Component/ClassLoader/MapClassLoader.php @@ -11,10 +11,14 @@ namespace Symfony\Component\ClassLoader; +@trigger_error('The '.__NAMESPACE__.'\MapClassLoader class is deprecated since version 3.3 and will be removed in 4.0. Use Composer instead.', E_USER_DEPRECATED); + /** * A class loader that uses a mapping file to look up paths. * * @author Fabien Potencier + * + * @deprecated since version 3.3, to be removed in 4.0. */ class MapClassLoader { diff --git a/src/Symfony/Component/ClassLoader/Psr4ClassLoader.php b/src/Symfony/Component/ClassLoader/Psr4ClassLoader.php index 84647b758d..ee3d7cf402 100644 --- a/src/Symfony/Component/ClassLoader/Psr4ClassLoader.php +++ b/src/Symfony/Component/ClassLoader/Psr4ClassLoader.php @@ -11,12 +11,16 @@ namespace Symfony\Component\ClassLoader; +@trigger_error('The '.__NAMESPACE__.'\Psr4ClassLoader class is deprecated since version 3.3 and will be removed in 4.0. Use Composer instead.', E_USER_DEPRECATED); + /** * A PSR-4 compatible class loader. * * See http://www.php-fig.org/psr/psr-4/ * * @author Alexander M. Turek + * + * @deprecated since version 3.3, to be removed in 4.0. */ class Psr4ClassLoader { diff --git a/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php b/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php index 09eea04229..bc9c871b75 100644 --- a/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php +++ b/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\ClassLoader\Tests; use Symfony\Component\ClassLoader\ClassLoader; +/** + * @group legacy + */ class ClassLoaderTest extends \PHPUnit_Framework_TestCase { public function testGetPrefixes() diff --git a/src/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php b/src/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php index 5de49d24bc..94877c4ca3 100644 --- a/src/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php +++ b/src/Symfony/Component/ClassLoader/Tests/ClassMapGeneratorTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\ClassLoader\Tests; use Symfony\Component\ClassLoader\ClassMapGenerator; +/** + * @group legacy + */ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase { /** diff --git a/src/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php b/src/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php index 21a7afbd6e..ea03860dd4 100644 --- a/src/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php +++ b/src/Symfony/Component/ClassLoader/Tests/Psr4ClassLoaderTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\ClassLoader\Tests; use Symfony\Component\ClassLoader\Psr4ClassLoader; +/** + * @group legacy + */ class Psr4ClassLoaderTest extends \PHPUnit_Framework_TestCase { /** diff --git a/src/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/src/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php index 360e6edf0d..3eeaf66fa9 100644 --- a/src/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php +++ b/src/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Debug\Tests\FatalErrorHandler; use Symfony\Component\Debug\Exception\FatalErrorException; -use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader; use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler; use Symfony\Component\Debug\DebugClassLoader; use Composer\Autoload\ClassLoader as ComposerClassLoader; @@ -69,12 +68,10 @@ class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase public function provideClassNotFoundData() { - $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception')); + $autoloader = new ComposerClassLoader(); + $autoloader->add('Symfony\Component\Debug\Exception\\', realpath(__DIR__.'/../../Exception')); - $symfonyAutoloader = new SymfonyClassLoader(); - $symfonyAutoloader->addPrefixes($prefixes); - - $debugClassLoader = new DebugClassLoader(array($symfonyAutoloader, 'loadClass')); + $debugClassLoader = new DebugClassLoader(array($autoloader, 'loadClass')); return array( array( @@ -130,7 +127,7 @@ class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase 'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found', ), "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?", - array($symfonyAutoloader, 'loadClass'), + array($autoloader, 'loadClass'), ), array( array( diff --git a/src/Symfony/Component/Debug/composer.json b/src/Symfony/Component/Debug/composer.json index 60e10d762d..6531eefd99 100644 --- a/src/Symfony/Component/Debug/composer.json +++ b/src/Symfony/Component/Debug/composer.json @@ -23,7 +23,6 @@ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "autoload": { diff --git a/src/Symfony/Component/HttpKernel/Client.php b/src/Symfony/Component/HttpKernel/Client.php index fd02f37921..c02ed2a6a6 100644 --- a/src/Symfony/Component/HttpKernel/Client.php +++ b/src/Symfony/Component/HttpKernel/Client.php @@ -96,22 +96,29 @@ class Client extends BaseClient { $kernel = str_replace("'", "\\'", serialize($this->kernel)); $request = str_replace("'", "\\'", serialize($request)); - - $r = new \ReflectionClass('\\Symfony\\Component\\ClassLoader\\ClassLoader'); - $requirePath = str_replace("'", "\\'", $r->getFileName()); - $symfonyPath = str_replace("'", "\\'", dirname(dirname(dirname(__DIR__)))); $errorReporting = error_reporting(); + $requires = ''; + foreach (get_declared_classes() as $class) { + if (0 === strpos($class, 'ComposerAutoloaderInit')) { + $r = new \ReflectionClass($class); + $file = dirname(dirname($r->getFileName())).'/autoload.php'; + if (file_exists($file)) { + $requires .= "require_once '".str_replace("'", "\\'", $file)."';\n"; + } + } + } + + if (!$requires) { + throw new \RuntimeException('Composer autoloader not found.'); + } + $code = <<addPrefix('Symfony', '$symfonyPath'); -\$loader->register(); +$requires \$kernel = unserialize('$kernel'); \$request = unserialize('$request');