From 4796452b0732692612e66412daca72f2f6449e1c Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Tue, 12 Jul 2011 23:25:15 +0200 Subject: [PATCH 1/3] DDC-1268 - Singular add*() method name through using targetEntity shortname --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 8 +++++++- tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index c9fc21136..0580cb27e 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -686,7 +686,13 @@ public function () private function _generateEntityStubMethod(ClassMetadataInfo $metadata, $type, $fieldName, $typeHint = null) { - $methodName = $type . Inflector::classify($fieldName); + if ($type == "add") { + $addMethod = explode("\\", $typeHint); + $addMethod = end($addMethod); + $methodName = $type . $addMethod; + } else { + $methodName = $type . Inflector::classify($fieldName); + } if ($this->_hasMethod($methodName, $metadata)) { return; diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 698219e24..fce7d4c20 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -98,7 +98,7 @@ class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'addComments'), "EntityGeneratorBook::addComments() missing."); + $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'addEntityGeneratorComment'), "EntityGeneratorBook::addEntityGeneratorComment() missing."); $this->assertEquals('published', $book->getStatus()); @@ -110,7 +110,7 @@ class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals($author, $book->getAuthor()); $comment = new EntityGeneratorComment(); - $book->addComments($comment); + $book->addEntityGeneratorComment($comment); $this->assertInstanceOf('Doctrine\Common\Collections\ArrayCollection', $book->getComments()); $this->assertEquals(new \Doctrine\Common\Collections\ArrayCollection(array($comment)), $book->getComments()); } From c87dedbec5063ac9efcf5586a17381fd1615a36d Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Tue, 12 Jul 2011 23:39:56 +0200 Subject: [PATCH 2/3] DDC-1254 - Dont throw exception about missing id in disconnected metadata factory --- .../ORM/Mapping/ClassMetadataFactory.php | 55 +++++++++++-------- .../DisconnectedClassMetadataFactory.php | 11 ++++ 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 8bfda6450..a021f756c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -313,28 +313,7 @@ class ClassMetadataFactory implements ClassMetadataFactoryInterface $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } - // Verify & complete identifier mapping - if ( ! $class->identifier && ! $class->isMappedSuperclass) { - throw MappingException::identifierRequired($className); - } - - // verify inheritance - if (!$class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { - if (!$parent) { - if (count($class->discriminatorMap) == 0) { - throw MappingException::missingDiscriminatorMap($class->name); - } - if (!$class->discriminatorColumn) { - throw MappingException::missingDiscriminatorColumn($class->name); - } - } else if ($parent && !$class->reflClass->isAbstract() && !in_array($class->name, array_values($class->discriminatorMap))) { - // enforce discriminator map for all entities of an inheritance hierachy, otherwise problems will occur. - throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); - } - } else if ($class->isMappedSuperclass && $class->name == $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { - // second condition is necessary for mapped superclasses in the middle of an inheritance hierachy - throw MappingException::noInheritanceOnMappedSuperClass($class->name); - } + $this->validateRuntimeMetadata($class, $parent); $this->loadedMetadata[$className] = $class; @@ -351,6 +330,38 @@ class ClassMetadataFactory implements ClassMetadataFactoryInterface return $loaded; } + /** + * Validate runtime metadata is correctly defined. + * + * @param ClassMetadata $class + * @param ClassMetadata $parent + */ + protected function validateRuntimeMetadata($class, $parent) + { + // Verify & complete identifier mapping + if ( ! $class->identifier && ! $class->isMappedSuperclass) { + throw MappingException::identifierRequired($className); + } + + // verify inheritance + if (!$class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { + if (!$parent) { + if (count($class->discriminatorMap) == 0) { + throw MappingException::missingDiscriminatorMap($class->name); + } + if (!$class->discriminatorColumn) { + throw MappingException::missingDiscriminatorColumn($class->name); + } + } else if ($parent && !$class->reflClass->isAbstract() && !in_array($class->name, array_values($class->discriminatorMap))) { + // enforce discriminator map for all entities of an inheritance hierachy, otherwise problems will occur. + throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); + } + } else if ($class->isMappedSuperclass && $class->name == $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { + // second condition is necessary for mapped superclasses in the middle of an inheritance hierachy + throw MappingException::noInheritanceOnMappedSuperClass($class->name); + } + } + /** * Creates a new ClassMetadata instance for the given class name. * diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 55503d400..7a7715231 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -52,6 +52,17 @@ class DisconnectedClassMetadataFactory extends ClassMetadataFactory return $metadata; } + /** + * Validate runtime metadata is correctly defined. + * + * @param ClassMetadata $class + * @param ClassMetadata $parent + */ + protected function validateRuntimeMetadata($class, $parent) + { + // validate nothing + } + /** * @override */ From d9b1dbbb091ef667b529af27441afba3610f8e4a Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Tue, 12 Jul 2011 23:43:24 +0200 Subject: [PATCH 3/3] DDC-1244 - Fix bug with entities without namespace --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 0580cb27e..f55af76b1 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -438,7 +438,7 @@ public function () if ($inClass) { $inClass = false; - $lastSeenClass = $lastSeenNamespace . '\\' . $token[1]; + $lastSeenClass = $lastSeenNamespace . ($lastSeenNamespace ? '\\' : '') . $token[1]; $this->_staticReflection[$lastSeenClass]['properties'] = array(); $this->_staticReflection[$lastSeenClass]['methods'] = array(); }