From e2f69af6bd391abe25052d4bc8a01547a5fc759e Mon Sep 17 00:00:00 2001 From: Kevin van Sonsbeek Date: Mon, 21 Oct 2024 21:16:29 +0200 Subject: [PATCH] [DependencyInjection] Fix linting factories implemented via __callStatic --- .../Compiler/AbstractRecursivePass.php | 4 ++++ .../Compiler/CheckTypeDeclarationsPassTest.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AbstractRecursivePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AbstractRecursivePass.php index f7a2176ebcece..b990ad828c1d2 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AbstractRecursivePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AbstractRecursivePass.php @@ -202,6 +202,10 @@ protected function getReflectionMethod(Definition $definition, string $method) return new \ReflectionMethod(static function (...$arguments) {}, '__invoke'); } + if ($r->hasMethod('__callStatic') && ($r = $r->getMethod('__callStatic')) && $r->isPublic()) { + return new \ReflectionMethod(static function (...$arguments) {}, '__invoke'); + } + throw new RuntimeException(sprintf('Invalid service "%s": method "%s()" does not exist.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method)); } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/CheckTypeDeclarationsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/CheckTypeDeclarationsPassTest.php index 90a5248f1e47d..9101f7fb5b873 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/CheckTypeDeclarationsPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/CheckTypeDeclarationsPassTest.php @@ -1015,6 +1015,17 @@ public function testCallableClass() $this->addToAssertionCount(1); } + public function testStaticCallableClass() + { + $container = new ContainerBuilder(); + $container->register('foo', StaticCallableClass::class) + ->setFactory([StaticCallableClass::class, 'staticMethodCall']); + + (new CheckTypeDeclarationsPass())->process($container); + + $this->addToAssertionCount(1); + } + public function testIgnoreDefinitionFactoryArgument() { $container = new ContainerBuilder(); @@ -1050,3 +1061,10 @@ public function __call($name, $arguments) { } } + +class StaticCallableClass +{ + public static function __callStatic($name, $arguments) + { + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy