diff --git a/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php b/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php index 5a6ffbc56..82564f754 100644 --- a/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php +++ b/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Name; use PhpParser\Node\Scalar\String_; use PHPStan\Analyser\Scope; use PHPStan\Rules\Rule; @@ -76,6 +77,11 @@ private function isDynamicArg(MethodCall $methodCall): bool return false; } - return ! $firstArg->value instanceof ClassConstFetch; + if ($firstArg->value instanceof ClassConstFetch) { + $classConstFetch = $firstArg->value; + return ! $classConstFetch->class instanceof Name; + } + + return true; } } diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php new file mode 100644 index 000000000..616b860b1 --- /dev/null +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php @@ -0,0 +1,18 @@ +getRepository($someObject::class); + } +} diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php similarity index 92% rename from tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php rename to tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php index a67658119..67a23065d 100644 --- a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php @@ -7,7 +7,7 @@ use Doctrine\ORM\EntityManager; use Symplify\PHPStanRules\Tests\Rules\Doctrine\NoGetRepositoryOutsideServiceRule\Source\SomeRandomEntity; -final readonly class SkipDymamicFetch +final readonly class SkipDynamicFetch { public function run( EntityManager $entityManager, diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php index 0622ee47d..ef58b63da 100644 --- a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php @@ -34,7 +34,8 @@ public static function provideData(): Iterator ]]]; yield [__DIR__ . '/Fixture/SkipInRepository.php', []]; - yield [__DIR__ . '/Fixture/SkipDymamicFetch.php', []]; + yield [__DIR__ . '/Fixture/SkipDynamicFetch.php', []]; + yield [__DIR__ . '/Fixture/SkipDynamicClassConstFetch.php', []]; } protected function getRule(): Rule