diff --git a/src/Reflection/ClassReflection.php b/src/Reflection/ClassReflection.php index 685e778307..1d89a72018 100644 --- a/src/Reflection/ClassReflection.php +++ b/src/Reflection/ClassReflection.php @@ -639,6 +639,11 @@ public function isAnonymous(): bool return $this->anonymousFilename !== null; } + public function is(string $className): bool + { + return $this->getName() === $className || $this->isSubclassOf($className); + } + public function isSubclassOf(string $className): bool { if (isset($this->subclasses[$className])) { diff --git a/tests/PHPStan/Reflection/ClassReflectionTest.php b/tests/PHPStan/Reflection/ClassReflectionTest.php index c58ff38384..fa00afc63f 100644 --- a/tests/PHPStan/Reflection/ClassReflectionTest.php +++ b/tests/PHPStan/Reflection/ClassReflectionTest.php @@ -28,7 +28,9 @@ use NestedTraits\BazTrait; use NestedTraits\NoTrait; use PHPStan\Testing\PHPStanTestCase; +use PHPStan\Testing\RuleTestCase; use PHPStan\Type\IntegerType; +use PHPUnit\Framework\TestCase; use ReflectionClass; use WrongClassConstantFile\SecuredRouter; use function array_map; @@ -307,4 +309,17 @@ public function testBackedEnumType(): void $this->assertInstanceOf(IntegerType::class, $enum->getBackedEnumType()); } + public function testIs(): void + { + $className = static::class; + + $reflectionProvider = $this->createReflectionProvider(); + $classReflection = $reflectionProvider->getClass($className); + + $this->assertTrue($classReflection->is($className)); + $this->assertTrue($classReflection->is(PHPStanTestCase::class)); + $this->assertTrue($classReflection->is(TestCase::class)); + $this->assertFalse($classReflection->is(RuleTestCase::class)); + } + }