diff --git a/src/Type/ExtensionReturnTypeExtension.php b/src/Type/ExtensionReturnTypeExtension.php index bfbe969..b9d27b3 100644 --- a/src/Type/ExtensionReturnTypeExtension.php +++ b/src/Type/ExtensionReturnTypeExtension.php @@ -3,6 +3,8 @@ namespace Syntro\SilverstripePHPStan\Type; use Exception; +use SilverStripe\Core\ClassInfo; +use SilverStripe\Core\Extensible; use Syntro\SilverstripePHPStan\ClassHelper; use Syntro\SilverstripePHPStan\ConfigHelper; use Syntro\SilverstripePHPStan\Utility; @@ -127,16 +129,13 @@ private function getOwnerClassNamesByExtensionClassName() private function getClassesUsingExtensibleTrait() { - $classes = get_declared_classes(); + $classes = ClassInfo::allClasses(); $result = array(); foreach ($classes as $class) { - $hasTrait = false; - foreach ($classes as $subclass) { - $hasTrait = false; - foreach (class_uses($class) as $trait) { - $hasTrait = $hasTrait || $trait == ClassHelper::Extensible; - } - if ($hasTrait) { + $reflection = new \ReflectionClass($class); + $traits = $reflection->getTraits(); + if (in_array(Extensible::class, $traits)) { + foreach (ClassInfo::subclassesFor($class, true) as $subclass) { $result[$subclass] = $subclass; } }