From 53ecedf70ab3105d266e67aec684f8b976c0e8f5 Mon Sep 17 00:00:00 2001 From: Vitali Yakavenka Date: Sun, 8 Jan 2012 15:20:35 +0300 Subject: [PATCH] Remove support to pass arguments to custom ID generator's constructor --- doctrine-mapping.xsd | 8 +------ .../ORM/Mapping/ClassMetadataFactory.php | 9 ++------ .../ORM/Mapping/ClassMetadataInfo.php | 1 - .../ORM/Mapping/CustomIdGenerator.php | 2 -- .../ORM/Mapping/Driver/AnnotationDriver.php | 3 +-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 7 +----- .../ORM/Mapping/Driver/YamlDriver.php | 3 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 ++--- .../ORM/Mapping/ClassMetadataFactoryTest.php | 23 ------------------- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 2 +- .../Doctrine.Tests.ORM.Mapping.Animal.dcm.xml | 9 ++------ .../Doctrine.Tests.ORM.Mapping.Animal.dcm.yml | 3 +-- 12 files changed, 13 insertions(+), 63 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index b04e8a87c..e8448539c 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -276,13 +276,7 @@ - - - - - - - + diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index d68af7a14..c4329d417 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -520,16 +520,11 @@ class ClassMetadataFactory implements ClassMetadataFactoryInterface break; case ClassMetadata::GENERATOR_TYPE_CUSTOM: $definition = $class->customGeneratorDefinition; - try { - $reflection = new \ReflectionClass($definition['class']); - $args = isset($definition['args']) ? - $definition['args'] : array(); - $generator = $reflection->newInstanceArgs($args); - $class->setIdGenerator($generator); - } catch (ReflectionException $e) { + if (!class_exists($definition['class'])) { throw new ORMException("Can't instantiate custom generator : " . $definition['class']); } + $class->setIdGenerator(new $definition['class']); break; default: throw new ORMException("Unknown generator type: " . $class->generatorType); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index f6053c167..8b457ace2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -188,7 +188,6 @@ class ClassMetadataInfo implements ClassMetadata * * array( * 'class' => 'ClassName', - * 'args' => array("constructor", "arguments") * ) * * diff --git a/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php b/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php index a4a5d8e35..4739c3c81 100644 --- a/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php +++ b/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php @@ -27,6 +27,4 @@ final class CustomIdGenerator implements Annotation { /** @var string */ public $class; - /** @var array */ - public $args; } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 05c949727..11b38756a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -328,8 +328,7 @@ class AnnotationDriver implements Driver throw MappingException::tableIdGeneratorNotImplemented($className); } else if ($customGeneratorAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\CustomIdGenerator')) { $metadata->setCustomGeneratorDefinition(array( - 'class' => $customGeneratorAnnot->class, - 'args' => $customGeneratorAnnot->args + 'class' => $customGeneratorAnnot->class )); } } else if ($oneToOneAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OneToOne')) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 094861fe7..86785a58b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -256,13 +256,8 @@ class XmlDriver extends AbstractFileDriver )); } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $args = array(); - foreach ($customGenerator->args->children() as $argument) { - $args[] = (string) $argument; - } $metadata->setCustomGeneratorDefinition(array( - 'class' => (string) $customGenerator['class'], - 'args' => $args + 'class' => (string) $customGenerator['class'] )); } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 590e95998..b1f98915d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -198,8 +198,7 @@ class YamlDriver extends AbstractFileDriver } else if (isset($idElement['customIdGenerator'])) { $customGenerator = $idElement['customIdGenerator']; $metadata->setCustomGeneratorDefinition(array( - 'class' => (string) $customGenerator['class'], - 'args' => $customGenerator['args'] + 'class' => (string) $customGenerator['class'] )); } else if (isset($idElement['tableGenerator'])) { throw MappingException::tableIdGeneratorNotImplemented($className); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 9c6f07389..5a7ccc453 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -97,7 +97,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $class->generatorType, "Generator Type"); $this->assertEquals( - array("class" => "stdClass", "args" => array("par1", "par2")), + array("class" => "stdClass"), $class->customGeneratorDefinition, "Custom Generator Definition"); } @@ -627,14 +627,14 @@ abstract class Animal { /** * @Id @Column(type="string") @GeneratedValue(strategy="CUSTOM") - * @CustomIdGenerator(class="stdClass", args={"par1", "par2"}) + * @CustomIdGenerator(class="stdClass") */ public $id; public static function loadMetadata(ClassMetadataInfo $metadata) { $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); - $metadata->setCustomGeneratorDefinition(array("class" => "stdClass", "args" => array("par1", "par2"))); + $metadata->setCustomGeneratorDefinition(array("class" => "stdClass")); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index ae97e34cc..04f413c95 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -66,24 +66,6 @@ class ClassMetadataFactoryTest extends \Doctrine\Tests\OrmTestCase $actual->idGenerator); } - public function testGetMetadataFor_PasesArgumentsToGeneratorsConstructor() - { - $cm1 = $this->_createValidClassMetadata(); - $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $cm1->customGeneratorDefinition = array( - "class" => "Doctrine\Tests\ORM\Mapping\CustomIdGenerator", - "args" => array("parameter")); - $cmf = $this->_createTestFactory(); - $cmf->setMetadataForClass($cm1->name, $cm1); - $expected = new CustomIdGenerator("parameter"); - - $actual = $cmf->getMetadataFor($cm1->name); - - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, - $actual->generatorType); - $this->assertEquals($expected, $actual->idGenerator); - } - public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->_createValidClassMetadata(); @@ -261,11 +243,6 @@ class TestEntity1 class CustomIdGenerator extends \Doctrine\ORM\Id\AbstractIdGenerator { - public $parameter; - public function __construct($parameter = null) - { - $this->parameter = $parameter; - } public function generate(\Doctrine\ORM\EntityManager $em, $entity) { } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 3ad0a0315..005178eed 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -27,4 +27,4 @@ $metadata->mapField(array( 'columnName' => 'id', )); $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); -$metadata->setCustomGeneratorDefinition(array("class" => "stdClass", "args" => array("par1", "par2"))); +$metadata->setCustomGeneratorDefinition(array("class" => "stdClass")); diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml index 3c58d4ad8..6981d0ba6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml @@ -9,13 +9,8 @@ - - - - par1 - par2 - - + + \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml index 4f01be63b..8fdfe3076 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml @@ -10,5 +10,4 @@ Doctrine\Tests\ORM\Mapping\Animal: generator: strategy: CUSTOM customIdGenerator: - class: stdClass - args: [ par1, par2 ] \ No newline at end of file + class: stdClass \ No newline at end of file