44
55use Composer \InstalledVersions ;
66use OutOfBoundsException ;
7- use PHPStan \BetterReflection \Reflector \Exception \IdentifierNotFound ;
8- use PHPStan \BetterReflection \Reflector \Reflector ;
97use PHPStan \PhpDoc \StubFilesExtension ;
108use function class_exists ;
119use function dirname ;
1210use function strpos ;
11+ use function version_compare ;
1312
1413class StubFilesExtensionLoader implements StubFilesExtension
1514{
1615
17- private Reflector $ reflector ;
18-
19- public function __construct (
20- Reflector $ reflector
21- )
22- {
23- $ this ->reflector = $ reflector ;
24- }
25-
2616 public function getFiles (): array
2717 {
2818 $ stubsDir = dirname (dirname (dirname (__DIR__ ))) . '/stubs ' ;
@@ -36,20 +26,7 @@ public function getFiles(): array
3626 $ files [] = $ stubsDir . '/DBAL/Connection.stub ' ;
3727 }
3828
39- $ hasLazyServiceEntityRepositoryAsParent = false ;
40-
41- try {
42- $ serviceEntityRepository = $ this ->reflector ->reflectClass ('Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository ' );
43- if ($ serviceEntityRepository ->getParentClass () !== null ) {
44- /** @var class-string $lazyServiceEntityRepositoryName */
45- $ lazyServiceEntityRepositoryName = 'Doctrine\Bundle\DoctrineBundle\Repository\LazyServiceEntityRepository ' ;
46- $ hasLazyServiceEntityRepositoryAsParent = $ serviceEntityRepository ->getParentClass ()->getName () === $ lazyServiceEntityRepositoryName ;
47- }
48- } catch (IdentifierNotFound $ e ) {
49- // pass
50- }
51-
52- if ($ hasLazyServiceEntityRepositoryAsParent ) {
29+ if ($ this ->hasLazyServiceEntityRepository ()) {
5330 $ files [] = $ stubsDir . '/LazyServiceEntityRepository.stub ' ;
5431 } else {
5532 $ files [] = $ stubsDir . '/ServiceEntityRepository.stub ' ;
@@ -73,6 +50,25 @@ public function getFiles(): array
7350 return $ files ;
7451 }
7552
53+ private function hasLazyServiceEntityRepository (): bool
54+ {
55+ if (!class_exists (InstalledVersions::class)) {
56+ return false ;
57+ }
58+
59+ try {
60+ $ bundleVersion = InstalledVersions::getVersion ('doctrine/doctrine-bundle ' );
61+ } catch (OutOfBoundsException $ e ) {
62+ return false ;
63+ }
64+
65+ if ($ bundleVersion === null ) {
66+ return false ;
67+ }
68+
69+ return version_compare ($ bundleVersion , '2.8.1 ' , '>= ' ) && version_compare ($ bundleVersion , '3.0.0 ' , '< ' );
70+ }
71+
7672 private function isInstalledVersion (string $ package , int $ majorVersion ): bool
7773 {
7874 if (!class_exists (InstalledVersions::class)) {
0 commit comments