diff --git a/src/Rules/PHPUnit/PHPUnitVersionDetector.php b/src/Rules/PHPUnit/PHPUnitVersionDetector.php index b82caaf..d35c3e7 100644 --- a/src/Rules/PHPUnit/PHPUnitVersionDetector.php +++ b/src/Rules/PHPUnit/PHPUnitVersionDetector.php @@ -2,45 +2,44 @@ namespace PHPStan\Rules\PHPUnit; -use PHPStan\Reflection\ReflectionProvider; use PHPUnit\Framework\TestCase; +use ReflectionClass; +use ReflectionException; use function dirname; use function explode; use function file_get_contents; -use function is_file; use function json_decode; class PHPUnitVersionDetector { - private ReflectionProvider $reflectionProvider; - - public function __construct(ReflectionProvider $reflectionProvider) - { - $this->reflectionProvider = $reflectionProvider; - } - public function createPHPUnitVersion(): PHPUnitVersion { + $file = false; $majorVersion = null; $minorVersion = null; - if ($this->reflectionProvider->hasClass(TestCase::class)) { - $testCase = $this->reflectionProvider->getClass(TestCase::class); - $file = $testCase->getFileName(); - if ($file !== null) { - $phpUnitRoot = dirname($file, 3); - $phpUnitComposer = $phpUnitRoot . '/composer.json'; - if (is_file($phpUnitComposer)) { - $composerJson = @file_get_contents($phpUnitComposer); - if ($composerJson !== false) { - $json = json_decode($composerJson, true); - $version = $json['extra']['branch-alias']['dev-main'] ?? null; - if ($version !== null) { - $versionParts = explode('.', $version); - $majorVersion = (int) $versionParts[0]; - $minorVersion = (int) $versionParts[1]; - } - } + + try { + // uses runtime reflection to reduce unnecessary work while bootstrapping PHPStan. + // static reflection would need to AST parse and build up reflection for a lot of files otherwise. + $reflection = new ReflectionClass(TestCase::class); + $file = $reflection->getFileName(); + } catch (ReflectionException $e) { + // PHPUnit might not be installed + } + + if ($file !== false) { + $phpUnitRoot = dirname($file, 3); + $phpUnitComposer = $phpUnitRoot . '/composer.json'; + + $composerJson = @file_get_contents($phpUnitComposer); + if ($composerJson !== false) { + $json = json_decode($composerJson, true); + $version = $json['extra']['branch-alias']['dev-main'] ?? null; + if ($version !== null) { + $versionParts = explode('.', $version); + $majorVersion = (int) $versionParts[0]; + $minorVersion = (int) $versionParts[1]; } } }