Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merge pull request zendframework/zendframework#987 from SocalNick/hot…
Browse files Browse the repository at this point in the history
…fix/di-compiler-supertypes

Supertype implementation was missing
  • Loading branch information
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/Definition/CompilerDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
13 changes: 13 additions & 0 deletions test/Definition/CompilerDefinitionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'));
}
}
8 changes: 8 additions & 0 deletions test/TestAsset/CompilerClasses/E.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace ZendTest\Di\TestAsset\CompilerClasses;

class E extends D
{

}

0 comments on commit 6a80fae

Please sign in to comment.