diff --git a/src/Utils/Reflection.php b/src/Utils/Reflection.php index 181596846..d7c1317f2 100644 --- a/src/Utils/Reflection.php +++ b/src/Utils/Reflection.php @@ -188,6 +188,9 @@ public static function expandClassName(string $name, \ReflectionClass $rc): stri */ public static function getUseStatements(\ReflectionClass $class): array { + if ($class->isAnonymous()) { + throw new Nette\NotImplementedException('Anonymous classes are not supported.'); + } static $cache = []; if (!isset($cache[$name = $class->getName()])) { if ($class->isInternal()) { diff --git a/tests/Utils/Reflection.expandClassName.phpt b/tests/Utils/Reflection.expandClassName.phpt index 38680f100..9d33ccc99 100644 --- a/tests/Utils/Reflection.expandClassName.phpt +++ b/tests/Utils/Reflection.expandClassName.phpt @@ -27,6 +27,12 @@ Assert::exception(function () use ($rcTest) { }, Nette\InvalidArgumentException::class, 'Class name must not be empty.'); +Assert::exception(function () use ($rcTest) { + Reflection::expandClassName('A', new ReflectionClass(new class { + })); +}, Nette\NotImplementedException::class, 'Anonymous classes are not supported.'); + + Assert::same('A', Reflection::expandClassName('A', $rcTest)); Assert::same('A\B', Reflection::expandClassName('C', $rcTest)); @@ -139,3 +145,8 @@ Assert::same( [], Reflection::getUseStatements(new ReflectionClass('stdClass')) ); + +Assert::exception(function () use ($rcTest) { + Reflection::getUseStatements(new ReflectionClass(new class { + })); +}, Nette\NotImplementedException::class, 'Anonymous classes are not supported.');