Skip to content

Commit

Permalink
Merge pull request #763 from Padam87/entgenparenttrait
Browse files Browse the repository at this point in the history
Entity generator - trait in parent class
  • Loading branch information
guilhermeblanco committed Aug 20, 2013
2 parents cc83ac6 + b041c22 commit 44f9952
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/Doctrine/ORM/Tools/EntityGenerator.php
Expand Up @@ -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();
Expand Down
8 changes: 8 additions & 0 deletions 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
{
}
31 changes: 31 additions & 0 deletions tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php
Expand Up @@ -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';

Expand Down Expand Up @@ -486,6 +487,36 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated()
$this->assertSame($reflClass->hasMethod('getAddress'), false);
}

/**
* @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
*/
Expand Down

0 comments on commit 44f9952

Please sign in to comment.