Skip to content

Commit 0a7a452

Browse files
committed
Allow passing anonymous class' names to Typed::named()
See #351 (comment)
1 parent 0094980 commit 0a7a452

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

src/main/php/lang/Type.class.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ public static function named($name, $context) {
287287
// card type.
288288
// * Anything else is a qualified or unqualified class name
289289
$l= strlen($name);
290-
$p= strcspn($name, '<&|[*(');
290+
$p= strcspn($name, '<&|[*(@');
291291
if ($p === $l) {
292292
return isset($context[$name]) ? $context[$name]() : ((isset($context['*']) && strcspn($name, '.\\') === $l)
293293
? $context['*']($name)
@@ -334,6 +334,8 @@ public static function named($name, $context) {
334334
} else {
335335
$t= self::named($base, $context)->newGenericType($components);
336336
}
337+
} else if ('@' === $name[$p]) {
338+
return new XPClass($name);
337339
} else {
338340
$t= self::named(trim(substr($name, 0, $p)), $context);
339341
$name= substr($name, $p);

src/test/php/lang/unittest/TypeTest.class.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,4 +504,10 @@ public function function_return_type($fixture, $expected) {
504504
public function split($names, $expected) {
505505
Assert::equals($expected, [...Type::split($names, ',')]);
506506
}
507+
508+
#[Test]
509+
public function anonymous_classes_in_named() {
510+
$t= new class() { };
511+
Assert::equals(new XPClass($t), Type::named(get_class($t), []));
512+
}
507513
}

0 commit comments

Comments
 (0)