Permalink
Browse files

Merge pull request #763 from Padam87/entgenparenttrait

Entity generator - trait in parent class
  • Loading branch information...
2 parents cc83ac6 + b041c22 commit 44f9952063efd0da7295b0ac7ef802bbd3179958 @guilhermeblanco guilhermeblanco committed Aug 20, 2013
View
10 lib/Doctrine/ORM/Tools/EntityGenerator.php
@@ -766,7 +766,15 @@ protected function getTraits(ClassMetadataInfo $metadata)
? new \ReflectionClass($metadata->name)
: $metadata->reflClass;
- return $reflClass->getTraits();
+ $traits = array();
+
+ while ($reflClass !== false) {
+ $traits = array_merge($traits, $reflClass->getTraits());
+
+ $reflClass = $reflClass->getParentClass();
+ }
+
+ return $traits;
}
return array();
View
8 tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Doctrine\Tests\Models\DDC2372;
+
+/** @Entity @Table(name="admins") */
+class DDC2372Admin extends DDC2372User
+{
+}
View
31 tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php
@@ -8,6 +8,7 @@
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\ClassMetadataFactory;
use Doctrine\Tests\Models\DDC2372\DDC2372User;
+use Doctrine\Tests\Models\DDC2372\DDC2372Admin;
require_once __DIR__ . '/../../TestInit.php';
@@ -487,6 +488,36 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated()
}
/**
+ * @group DDC-2372
+ */
+ public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses()
+ {
+ if (PHP_VERSION_ID < 50400) {
+ $this->markTestSkipped('Traits are not available before php 5.4.');
+ }
+
+ $cmf = new ClassMetadataFactory();
+ $em = $this->_getTestEntityManager();
+ $cmf->setEntityManager($em);
+
+ $user = new DDC2372Admin();
+ $metadata = $cmf->getMetadataFor(get_class($user));
+ $metadata->name = $this->_namespace . "\DDC2372Admin";
+ $metadata->namespace = $this->_namespace;
+
+ $this->_generator->writeEntityClass($metadata, $this->_tmpDir);
+
+ $this->assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php");
+ require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php";
+
+ $reflClass = new \ReflectionClass($metadata->name);
+
+ $this->assertSame($reflClass->hasProperty('address'), false);
+ $this->assertSame($reflClass->hasMethod('setAddress'), false);
+ $this->assertSame($reflClass->hasMethod('getAddress'), false);
+ }
+
+ /**
* @return array
*/
public function getEntityTypeAliasDataProvider()

0 comments on commit 44f9952

Please sign in to comment.