Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions stubs/ReflectionClass.stub
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,13 @@ class ReflectionClass
public function getAttributes(?string $name = null, int $flags = 0)
{
}

/**
* @phpstan-assert-if-true class-string<\UnitEnum> $this->name
* @phpstan-assert-if-true ReflectionClass<\UnitEnum> $this
* @phpstan-assert-if-false !class-string<\UnitEnum> $this->name
*/
public function isEnum(): bool
{
}
}
1 change: 1 addition & 0 deletions tests/PHPStan/Analyser/NodeScopeResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ private static function findTestFiles(): iterable
yield __DIR__ . '/../Rules/Methods/data/bug-4801.php';
yield __DIR__ . '/../Rules/Arrays/data/narrow-superglobal.php';
yield __DIR__ . '/../Rules/Methods/data/bug-12927.php';
yield __DIR__ . '/data/reflectionclass-isEnum.php';
}

/**
Expand Down
2 changes: 0 additions & 2 deletions tests/PHPStan/Analyser/data/enum-reflection-php81.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
namespace EnumReflection81;

use ReflectionEnum;
use ReflectionEnumBackedCase;
use ReflectionEnumUnitCase;
use function PHPStan\Testing\assertType;

enum Foo: int
Expand Down
19 changes: 19 additions & 0 deletions tests/PHPStan/Analyser/data/reflectionclass-isEnum.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php // lint >= 8.1

namespace ReflectionClassIsEnum;

use ReflectionClass;
use function PHPStan\Testing\assertType;

/**
* @param class-string $class
*/
function testNarrowClassAfterIsEnum(string $class): void {
$r = new ReflectionClass($class);
assertType('class-string<object>', $r->name);
if ($r->isEnum()) {
assertType('ReflectionClass<\UnitEnum>', $r);
assertType('class-string<\UnitEnum>', $r->name);
}
}

Loading