diff --git a/src/Definition/CompilerDefinition.php b/src/Definition/CompilerDefinition.php index 24db5e56..13aedb78 100644 --- a/src/Definition/CompilerDefinition.php +++ b/src/Definition/CompilerDefinition.php @@ -107,6 +107,19 @@ protected function processClass($class) } } + $rTarget = $rClass; + $supertypes = array(); + do { + $supertypes = array_merge($supertypes, $rTarget->getInterfaceNames()); + if (!($rTargetParent = $rTarget->getParentClass())) { + break; + } + $supertypes[] = $rTargetParent->getName(); + $rTarget = $rTargetParent; + } while (true); + + $def['supertypes'] = $supertypes; + if ($def['instantiator'] == null) { if ($rClass->isInstantiable()) { $def['instantiator'] = '__construct'; diff --git a/test/Definition/CompilerDefinitionTest.php b/test/Definition/CompilerDefinitionTest.php index be30bcb8..527d7915 100644 --- a/test/Definition/CompilerDefinitionTest.php +++ b/test/Definition/CompilerDefinitionTest.php @@ -42,4 +42,17 @@ public function testCompilerCompilesAgainstConstructorInjectionAssets() $definition->getMethodParameters('ZendTest\Di\TestAsset\CompilerClasses\C', 'setB') ); } + + public function testCompilerSupertypes() + { + $definition = new CompilerDefinition; + $definition->addDirectory(__DIR__ . '/../TestAsset/CompilerClasses'); + $definition->compile(); + $this->assertCount(0, $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\C')); + $this->assertCount(1, $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\D')); + $this->assertCount(2, $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\E')); + $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\C', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\D')); + $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\C', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\E')); + $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\D', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\E')); + } } diff --git a/test/TestAsset/CompilerClasses/E.php b/test/TestAsset/CompilerClasses/E.php new file mode 100644 index 00000000..019f6693 --- /dev/null +++ b/test/TestAsset/CompilerClasses/E.php @@ -0,0 +1,8 @@ +