From 6d724ad9ffd5dcbff6ea4c3a1e961430474b2a82 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Wed, 25 May 2011 00:26:20 +0200 Subject: [PATCH] Make ORM forward compatible with new Doctrine Annotations library version 2.1 --- lib/Doctrine/ORM/Configuration.php | 18 +++++++--- lib/vendor/doctrine-common | 2 +- .../Tests/Mocks/EntityManagerMock.php | 2 +- .../ORM/Mapping/AnnotationDriverTest.php | 5 +-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 5 +-- .../Tests/ORM/Mapping/DriverChainTest.php | 7 ++-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 8 ++--- .../AbstractClassMetadataExporterTest.php | 2 +- tests/Doctrine/Tests/OrmTestCase.php | 35 +++++++++++++++++++ 9 files changed, 58 insertions(+), 26 deletions(-) diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 999d0c84c..f2268bfe9 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -20,7 +20,8 @@ namespace Doctrine\ORM; use Doctrine\Common\Cache\Cache, - Doctrine\ORM\Mapping\Driver\Driver; + Doctrine\ORM\Mapping\Driver\Driver, + Doctrine\Common\Cache\ArrayCache; /** * Configuration container for all configuration options of Doctrine. @@ -120,9 +121,18 @@ class Configuration extends \Doctrine\DBAL\Configuration */ public function newDefaultAnnotationDriver($paths = array()) { - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - + if (version_compare(\Doctrine\Common\Version::VERSION, '2.1.0-BETA3-DEV', '>=')) { + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + $reader->setIgnoreNotImportedAnnotations(true); + $reader->setEnableParsePhpImports(false); + $reader = new \Doctrine\Common\Annotations\CachedReader( + new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache() + ); + } else { + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + } return new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, (array)$paths); } diff --git a/lib/vendor/doctrine-common b/lib/vendor/doctrine-common index ea434bbea..f87ee1be5 160000 --- a/lib/vendor/doctrine-common +++ b/lib/vendor/doctrine-common @@ -1 +1 @@ -Subproject commit ea434bbea37e067aa52272816c6dcda5ff826154 +Subproject commit f87ee1be5113a4a594827731dd1f5647cfc288fc diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index 4006ebda7..edf220a42 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -78,7 +78,7 @@ class EntityManagerMock extends \Doctrine\ORM\EntityManager $config = new \Doctrine\ORM\Configuration(); $config->setProxyDir(__DIR__ . '/../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl(\Doctrine\ORM\Mapping\Driver\AnnotationDriver::create()); + $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver()); } if (is_null($eventManager)) { $eventManager = new \Doctrine\Common\EventManager(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index f02401975..be8a9bc43 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -99,10 +99,7 @@ class AnnotationDriverTest extends AbstractMappingDriverTest protected function _loadDriver() { - $cache = new \Doctrine\Common\Cache\ArrayCache(); - $reader = new \Doctrine\Common\Annotations\AnnotationReader($cache); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - return new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader); + return $this->createAnnotationDriver(); } protected function _ensureIsLoaded($entityClassName) diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 72a49a701..dbb82f054 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -67,10 +67,7 @@ class ClassMetadataFactoryTest extends \Doctrine\Tests\OrmTestCase { require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; - $reader = new \Doctrine\Common\Annotations\AnnotationReader(new \Doctrine\Common\Cache\ArrayCache); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - $metadataDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader); - $metadataDriver->addPaths(array(__DIR__ . '/../../Models/Global/')); + $metadataDriver = $this->createAnnotationDriver(array(__DIR__ . '/../../Models/Global/')); $entityManager = $this->_createEntityManager($metadataDriver); diff --git a/tests/Doctrine/Tests/ORM/Mapping/DriverChainTest.php b/tests/Doctrine/Tests/ORM/Mapping/DriverChainTest.php index d218aaf8f..dc8bc695d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/DriverChainTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/DriverChainTest.php @@ -81,12 +81,9 @@ class DriverChainTest extends \Doctrine\Tests\OrmTestCase * @group DDC-706 */ public function testIsTransient() - { - $reader = new \Doctrine\Common\Annotations\AnnotationReader(new \Doctrine\Common\Cache\ArrayCache()); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - + { $chain = new DriverChain(); - $chain->addDriver(new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array()), 'Doctrine\Tests\Models\CMS'); + $chain->addDriver($this->createAnnotationDriver(), 'Doctrine\Tests\Models\CMS'); $this->assertTrue($chain->isTransient('stdClass'), "stdClass isTransient"); $this->assertFalse($chain->isTransient('Doctrine\Tests\Models\CMS\CmsUser'), "CmsUser is not Transient"); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index d7cd56132..698219e24 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -166,9 +166,7 @@ class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase $book = $this->newInstance($metadata); $cm = new \Doctrine\ORM\Mapping\ClassMetadata($metadata->name); - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setDefaultAnnotationNamespace("Doctrine\\ORM\\Mapping\\"); - $driver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader); + $driver = $this->createAnnotationDriver(); $driver->loadMetadataForClass($cm->name, $cm); $this->assertEquals($cm->columnNames, $metadata->columnNames); @@ -188,9 +186,7 @@ class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase $book = $this->newInstance($metadata); $cm = new \Doctrine\ORM\Mapping\ClassMetadata($metadata->name); - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setAnnotationNamespaceAlias("Doctrine\\ORM\\Mapping\\", "orm"); - $driver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader); + $driver = $this->createAnnotationDriver(array(), 'orm'); $driver->loadMetadataForClass($cm->name, $cm); $this->assertEquals($cm->columnNames, $metadata->columnNames); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 4a85918d6..850fb76ba 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -78,7 +78,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest $class = 'Doctrine\ORM\Mapping\Driver\\' . $driverName; if ($type === 'annotation') { - $driver = $class::create($path); + $driver = $this->createAnnotationDriver(array($path)); } else { $driver = new $class($path); } diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 3991d5b6d..ff8b7f649 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests; +use Doctrine\Common\Cache\ArrayCache; + /** * Base testcase class for all ORM testcases. */ @@ -12,6 +14,39 @@ abstract class OrmTestCase extends DoctrineTestCase /** The query cache that is shared between all ORM tests (except functional tests). */ private static $_queryCacheImpl = null; + /** + * @param array $paths + * @return \Doctrine\Common\Annotations\AnnotationReader + */ + protected function createAnnotationDriver($paths = array(), $alias = null) + { + if (version_compare(\Doctrine\Common\Version::VERSION, '3.0.0', '>=')) { + $reader = new \Doctrine\Common\Annotations\CachedReader( + new \Doctrine\Common\Annotations\AnnotationReader(), new ArrayCache() + ); + } else if (version_compare(\Doctrine\Common\Version::VERSION, '2.1.0-BETA3-DEV', '>=')) { + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setIgnoreNotImportedAnnotations(true); + $reader->setEnableParsePhpImports(false); + if ($alias) { + $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias); + } else { + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + } + $reader = new \Doctrine\Common\Annotations\CachedReader( + new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache() + ); + } else { + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + if ($alias) { + $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias); + } else { + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + } + } + return new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, (array)$paths); + } + /** * Creates an EntityManager for testing purposes. *