diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 099f4cb..a2f14ef 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -15,7 +15,7 @@ jobs: strategy: matrix: php-version: - - "7.4" + - "8.0" steps: - name: "Checkout" @@ -42,8 +42,8 @@ jobs: strategy: matrix: php-version: - - "7.4" - "8.0" + - "8.1" dependencies: - "lowest" - "highest" @@ -71,23 +71,15 @@ jobs: restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - name: "Install lowest dependencies" - if: ${{ matrix.dependencies == 'lowest' && matrix.php-version != '8.0' }} - run: "composer update --no-interaction --no-progress --prefer-lowest" - - - name: "Install highest dependencies" - if: ${{ matrix.dependencies == 'highest' && matrix.php-version != '8.0' }} - run: "composer update --no-interaction --no-progress" - - - name: "Install lowest dependencies PHP 8.0" - if: ${{ matrix.dependencies == 'lowest' && matrix.php-version == '8.0' }} + if: ${{ matrix.dependencies == 'lowest' }} run: "composer update --no-interaction --no-progress --ignore-platform-reqs --prefer-lowest" - - name: "Install highest dependencies PHP 8.0" - if: ${{ matrix.dependencies == 'highest' && matrix.php-version == '8.0' }} + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} run: "composer update --no-interaction --no-progress --ignore-platform-reqs" - name: "Run tests" - timeout-minutes: 3 + timeout-minutes: 5 run: "vendor/bin/phpunit --no-coverage --no-logging" code-coverage: @@ -98,7 +90,7 @@ jobs: strategy: matrix: php-version: - - "7.4" + - "8.0" steps: - name: "Checkout" @@ -123,7 +115,7 @@ jobs: restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - name: "Install dependencies" - run: "composer update --no-interaction --no-progress" + run: "composer update --no-interaction --no-progress --ignore-platform-reqs" - name: "Run tests" timeout-minutes: 3 @@ -144,7 +136,7 @@ jobs: strategy: matrix: php-version: - - "7.4" + - "8.0" steps: - name: "Checkout" @@ -168,7 +160,7 @@ jobs: restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - name: "Install dependencies" - run: "composer update --no-interaction --no-progress" + run: "composer update --no-interaction --no-progress --ignore-platform-reqs" - name: "Check coding standards" run: "vendor/bin/php-cs-fixer fix --verbose --dry-run --diff" @@ -181,7 +173,7 @@ jobs: strategy: matrix: php-version: - - "7.4" + - "8.0" steps: - name: "Checkout" @@ -206,7 +198,7 @@ jobs: restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - name: "Install dependencies" - run: "composer update --no-interaction --no-progress" + run: "composer update --no-interaction --no-progress --ignore-platform-reqs" - name: "Run static analysis" run: "vendor/bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr" diff --git a/Makefile b/Makefile index 4cab55b..188958f 100644 --- a/Makefile +++ b/Makefile @@ -15,4 +15,4 @@ static-analysis: vendor .PHONY: test test: vendor - php -d zend.assertions=1 vendor/bin/phpunit + php -d zend.assertions=1 vendor/bin/phpunit ${arg} diff --git a/composer.json b/composer.json index 9a13bf0..4362ff7 100644 --- a/composer.json +++ b/composer.json @@ -18,13 +18,13 @@ } ], "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^0.12.99" + "php": ">=8.0", + "phpstan/phpstan": "^1.1.2" }, "conflict": { "laminas/laminas-cache": "<2.13", "laminas/laminas-filter": "<2.11", - "laminas/laminas-form": "<2.17", + "laminas/laminas-form": "<3.0", "laminas/laminas-hydrator": "<4.3", "laminas/laminas-i18n": "<2.11", "laminas/laminas-inputfilter": "<2.12", @@ -35,20 +35,21 @@ "laminas/laminas-validator": "<2.15" }, "require-dev": { - "laminas/laminas-cache": "^2.13.0", - "laminas/laminas-filter": "^2.11.1", - "laminas/laminas-form": "^2.17.0", + "laminas/laminas-cache": "^2.13.2", + "laminas/laminas-filter": "^2.12.0", + "laminas/laminas-form": "^3.0.1", "laminas/laminas-hydrator": "^4.3.1", - "laminas/laminas-i18n": "^2.11.2", + "laminas/laminas-i18n": "^2.11.3", "laminas/laminas-inputfilter": "^2.12.0", "laminas/laminas-log": "^2.13.1", - "laminas/laminas-mail": "^2.15.0", - "laminas/laminas-mvc": "^3.2.0", - "laminas/laminas-paginator": "^2.10.0", + "laminas/laminas-mail": "^2.15.1", + "laminas/laminas-mvc": "^3.3.0", + "laminas/laminas-paginator": "^2.11.0", "laminas/laminas-validator": "^2.15.0", "malukenho/mcbumpface": "^1.1.5", - "phpstan/phpstan-phpunit": "^0.12.22", - "phpunit/phpunit": "^9.5.9", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpunit/phpunit": "^9.5.10", "slam/php-cs-fixer-extensions": "^v3.1.0", "slam/php-debug-r": "^v1.7.0" }, diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 0b382c3..4b322ee 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,7 +1,17 @@ parameters: ignoreErrors: - - message: "#^Parameter \\#2 \\$args of static method PHPStan\\\\Reflection\\\\ParametersAcceptorSelector\\:\\:selectFromArgs\\(\\) expects array\\, array\\ given\\.$#" + message: "#^Call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertInstanceOf\\(\\) with 'LaminasPhpStan\\\\\\\\TestAsset\\\\\\\\BarService' and Laminas\\\\Stdlib\\\\DispatchableInterface will always evaluate to false\\.$#" count: 1 - path: src/Type/Laminas/PluginMethodDynamicReturnTypeExtension/AbstractPluginMethodDynamicReturnTypeExtension.php + path: tests/Type/Laminas/ServiceManagerLoaderTest.php + + - + message: + """ + #^Fetching class constant class of deprecated class Laminas\\\\Cache\\\\PatternPluginManager\\: + This will be removed in v3\\.0\\.0\\. Cache pattern will require dependency injection and thus, a generic + plugin manager makes no sense anymore\\.$# + """ + count: 1 + path: tests/Type/Laminas/ServiceManagerLoaderTest.php diff --git a/phpstan.neon b/phpstan.neon index af6903b..37ec4d6 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,6 @@ includes: - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-deprecation-rules/rules.neon - phpstan-baseline.neon parameters: @@ -7,8 +8,9 @@ parameters: paths: - src/ - tests/ - excludes_analyse: - - tests/Rules/Laminas/ServiceManagerGetMethodCallRule/ - - tests/Rules/Laminas/PluginManagerGetMethodCallRule/ - - tests/TestAsset/ - - tests/LaminasIntegration/data/ + excludePaths: + analyseAndScan: + - tests/Rules/Laminas/ServiceManagerGetMethodCallRule/ + - tests/Rules/Laminas/PluginManagerGetMethodCallRule/ + - tests/TestAsset/ + - tests/LaminasIntegration/data/ diff --git a/src/Rules/Laminas/ServiceManagerGetMethodCallRule.php b/src/Rules/Laminas/ServiceManagerGetMethodCallRule.php index aaef95d..7223e45 100644 --- a/src/Rules/Laminas/ServiceManagerGetMethodCallRule.php +++ b/src/Rules/Laminas/ServiceManagerGetMethodCallRule.php @@ -12,7 +12,7 @@ use PhpParser\Node; use PhpParser\Node\Arg; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\ObjectType; @@ -24,14 +24,10 @@ */ final class ServiceManagerGetMethodCallRule implements Rule { - private Broker $broker; - - private ServiceManagerLoader $serviceManagerLoader; - - public function __construct(Broker $broker, ServiceManagerLoader $serviceManagerLoader) - { - $this->broker = $broker; - $this->serviceManagerLoader = $serviceManagerLoader; + public function __construct( + private ReflectionProvider $reflectionProvider, + private ServiceManagerLoader $serviceManagerLoader + ) { } public function getNodeType(): string @@ -46,11 +42,12 @@ public function getNodeType(): string */ public function processNode(Node $node, Scope $scope): array { - if (1 !== \count($node->args)) { + $args = $node->getArgs(); + if (1 !== \count($args)) { return []; } - $firstArg = $node->args[0]; + $firstArg = $args[0]; if (! $firstArg instanceof Arg) { return []; } @@ -88,7 +85,7 @@ public function processNode(Node $node, Scope $scope): array $refProperty->setAccessible(true); $autoAddInvokableClass = $refProperty->getValue($serviceManager); if ($autoAddInvokableClass) { - if ($this->broker->hasClass($serviceName)) { + if ($this->reflectionProvider->hasClass($serviceName)) { return []; } $classDoesNotExistNote = \sprintf(' nor the class "%s" exists', $serviceName); diff --git a/src/ServiceManagerLoader.php b/src/ServiceManagerLoader.php index 0e1ef27..5990384 100644 --- a/src/ServiceManagerLoader.php +++ b/src/ServiceManagerLoader.php @@ -72,13 +72,17 @@ public function getServiceLocator(string $serviceManagerName): ServiceLocatorInt $refProp = new ReflectionProperty(ServiceListenerFactory::class, 'defaultServiceConfig'); $refProp->setAccessible(true); $config = $refProp->getValue(new ServiceListenerFactory()); + \assert(\is_array($config)); + \assert(\is_array($config['factories'])); unset($config['factories']['config']); $refProp->setAccessible(false); $serviceManager->configure($config); } foreach ($this->knownModules as $module) { if (\class_exists($module)) { - $serviceManager->configure((new $module())->getDependencyConfig()); + $module = new $module(); + \assert(\method_exists($module, 'getDependencyConfig')); + $serviceManager->configure($module->getDependencyConfig()); } } @@ -88,6 +92,7 @@ public function getServiceLocator(string $serviceManagerName): ServiceLocatorInt $serviceLocator = $this->serviceLocator; if (! isset($this->serviceManagerNames[$serviceManagerName])) { $serviceLocator = $serviceLocator->get($serviceManagerName); + \assert($serviceLocator instanceof ServiceLocatorInterface); } return $serviceLocator; diff --git a/src/Type/Laminas/ControllerPluginClassReflectionExtension.php b/src/Type/Laminas/ControllerPluginClassReflectionExtension.php index fa0d193..0f14803 100644 --- a/src/Type/Laminas/ControllerPluginClassReflectionExtension.php +++ b/src/Type/Laminas/ControllerPluginClassReflectionExtension.php @@ -7,27 +7,18 @@ use Laminas\Mvc\Controller\AbstractController; use Laminas\ServiceManager\ServiceLocatorInterface; use LaminasPhpStan\ServiceManagerLoader; -use PHPStan\Broker\Broker; -use PHPStan\Reflection\BrokerAwareExtension; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\MethodsClassReflectionExtension; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; -final class ControllerPluginClassReflectionExtension implements BrokerAwareExtension, MethodsClassReflectionExtension +final class ControllerPluginClassReflectionExtension implements MethodsClassReflectionExtension { - private ServiceManagerLoader $serviceManagerLoader; - - private Broker $broker; - - public function __construct(ServiceManagerLoader $serviceManagerLoader) - { - $this->serviceManagerLoader = $serviceManagerLoader; - } - - public function setBroker(Broker $broker): void - { - $this->broker = $broker; + public function __construct( + private ReflectionProvider $reflectionProvider, + private ServiceManagerLoader $serviceManagerLoader + ) { } public function hasMethod(ClassReflection $classReflection, string $methodName): bool @@ -37,11 +28,13 @@ public function hasMethod(ClassReflection $classReflection, string $methodName): public function getMethod(ClassReflection $classReflection, string $methodName): MethodReflection { - $plugin = $this->getControllerPluginManager()->get($methodName); + $plugin = $this->getControllerPluginManager()->get($methodName); + \assert(\is_object($plugin)); + $pluginClassName = \get_class($plugin); if (\is_callable($plugin)) { - return $this->broker->getClass($pluginClassName)->getNativeMethod('__invoke'); + return $this->reflectionProvider->getClass($pluginClassName)->getNativeMethod('__invoke'); } $returnType = new ObjectType($pluginClassName); diff --git a/src/Type/Laminas/PluginMethodDynamicReturnTypeExtension/AbstractPluginMethodDynamicReturnTypeExtension.php b/src/Type/Laminas/PluginMethodDynamicReturnTypeExtension/AbstractPluginMethodDynamicReturnTypeExtension.php index fbf5bfe..2555d24 100644 --- a/src/Type/Laminas/PluginMethodDynamicReturnTypeExtension/AbstractPluginMethodDynamicReturnTypeExtension.php +++ b/src/Type/Laminas/PluginMethodDynamicReturnTypeExtension/AbstractPluginMethodDynamicReturnTypeExtension.php @@ -36,7 +36,7 @@ final public function getTypeFromMethodCall( MethodCall $methodCall, Scope $scope ): Type { - $firstArg = $methodCall->args[0]; + $firstArg = $methodCall->getArgs()[0]; if (! $firstArg instanceof Arg) { throw new \PHPStan\ShouldNotHappenException(\sprintf( 'Argument passed to %s::%s should be a string, %s given', @@ -52,11 +52,14 @@ final public function getTypeFromMethodCall( if (null !== $plugin) { $pluginManager = $this->serviceManagerLoader->getServiceLocator($this->getPluginManagerName()); - return new ObjectType(\get_class($pluginManager->get($plugin))); + $pluginInstance = $pluginManager->get($plugin); + \assert(\is_object($pluginInstance)); + + return new ObjectType(\get_class($pluginInstance)); } if ($argType instanceof StringType) { - return ParametersAcceptorSelector::selectFromArgs($scope, $methodCall->args, $methodReflection->getVariants())->getReturnType(); + return ParametersAcceptorSelector::selectFromArgs($scope, $methodCall->getArgs(), $methodReflection->getVariants())->getReturnType(); } throw new \PHPStan\ShouldNotHappenException(\sprintf( diff --git a/src/Type/Laminas/ServiceGetterDynamicReturnTypeExtension/AbstractServiceGetterDynamicReturnTypeExtension.php b/src/Type/Laminas/ServiceGetterDynamicReturnTypeExtension/AbstractServiceGetterDynamicReturnTypeExtension.php index 1a9808f..462683c 100644 --- a/src/Type/Laminas/ServiceGetterDynamicReturnTypeExtension/AbstractServiceGetterDynamicReturnTypeExtension.php +++ b/src/Type/Laminas/ServiceGetterDynamicReturnTypeExtension/AbstractServiceGetterDynamicReturnTypeExtension.php @@ -43,9 +43,11 @@ final public function getTypeFromMethodCall( MethodCall $methodCall, Scope $scope ): Type { - $serviceManager = $this->serviceManagerLoader->getServiceLocator(ServiceLocatorInterface::class); - $serviceName = $this->methodToServiceMap[$methodReflection->getName()]; - $serviceClass = \get_class($serviceManager->get($serviceName)); + $serviceManager = $this->serviceManagerLoader->getServiceLocator(ServiceLocatorInterface::class); + $serviceName = $this->methodToServiceMap[$methodReflection->getName()]; + $serviceInstance = $serviceManager->get($serviceName); + \assert(\is_object($serviceInstance)); + $serviceClass = \get_class($serviceInstance); return new ObjectType($serviceClass); } diff --git a/src/Type/Laminas/ServiceManagerGetDynamicReturnTypeExtension.php b/src/Type/Laminas/ServiceManagerGetDynamicReturnTypeExtension.php index e2283c2..f83df4c 100644 --- a/src/Type/Laminas/ServiceManagerGetDynamicReturnTypeExtension.php +++ b/src/Type/Laminas/ServiceManagerGetDynamicReturnTypeExtension.php @@ -10,9 +10,8 @@ use PhpParser\Node\Arg; use PhpParser\Node\Expr\MethodCall; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; -use PHPStan\Reflection\BrokerAwareExtension; use PHPStan\Reflection\MethodReflection; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\DynamicMethodReturnTypeExtension; use PHPStan\Type\MixedType; @@ -21,20 +20,12 @@ use PHPStan\Type\Type; use ReflectionClass; -final class ServiceManagerGetDynamicReturnTypeExtension implements BrokerAwareExtension, DynamicMethodReturnTypeExtension +final class ServiceManagerGetDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension { - private ServiceManagerLoader $serviceManagerLoader; - - private Broker $broker; - - public function __construct(ServiceManagerLoader $serviceManagerLoader) - { - $this->serviceManagerLoader = $serviceManagerLoader; - } - - public function setBroker(Broker $broker): void - { - $this->broker = $broker; + public function __construct( + private ReflectionProvider $reflectionProvider, + private ServiceManagerLoader $serviceManagerLoader + ) { } public function getClass(): string @@ -57,13 +48,14 @@ public function getTypeFromMethodCall( return new MixedType(); } - if (1 !== \count($methodCall->args)) { + $args = $methodCall->getArgs(); + if (1 !== \count($args)) { return new MixedType(); } $serviceManager = $this->serviceManagerLoader->getServiceLocator($calledOnType->getClassName()); - $firstArg = $methodCall->args[0]; + $firstArg = $args[0]; if (! $firstArg instanceof Arg) { throw new \PHPStan\ShouldNotHappenException(\sprintf( 'Argument passed to %s::%s should be a string, %s given', @@ -79,7 +71,8 @@ public function getTypeFromMethodCall( $refProperty = $refClass->getProperty('instanceOf'); $refProperty->setAccessible(true); $returnedInstance = $refProperty->getValue($serviceManager); - if (null !== $returnedInstance && $this->broker->hasClass($returnedInstance)) { + \assert(null === $returnedInstance || \is_string($returnedInstance)); + if (null !== $returnedInstance && $this->reflectionProvider->hasClass($returnedInstance)) { return new ObjectType($returnedInstance); } } diff --git a/src/Type/Laminas/StdlibAbstractOptionsPropertiesClassReflectionExtension.php b/src/Type/Laminas/StdlibAbstractOptionsPropertiesClassReflectionExtension.php index e04e3d9..89d70f7 100644 --- a/src/Type/Laminas/StdlibAbstractOptionsPropertiesClassReflectionExtension.php +++ b/src/Type/Laminas/StdlibAbstractOptionsPropertiesClassReflectionExtension.php @@ -19,21 +19,12 @@ public function hasProperty(ClassReflection $classReflection, string $propertyNa public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection { - return new class($classReflection, $propertyName, $this->getGetterName($propertyName), $this->getSetterName($propertyName)) implements PropertyReflection { - private ClassReflection $classReflection; - - private string $propertyName; - - private string $getterName; - - private string $setterName; - - public function __construct(ClassReflection $classReflection, string $propertyName, string $getterName, string $setterName) - { - $this->classReflection = $classReflection; - $this->propertyName = $propertyName; - $this->getterName = $getterName; - $this->setterName = $setterName; + return new class($classReflection, $propertyName, $this->getSetterName($propertyName)) implements PropertyReflection { + public function __construct( + private ClassReflection $classReflection, + private string $propertyName, + private string $setterName + ) { } public function getDeclaringClass(): ClassReflection diff --git a/tests/LaminasIntegration/data/controllerRequestResponseDynamicReturn-4.json b/tests/LaminasIntegration/data/controllerRequestResponseDynamicReturn-4.json new file mode 100644 index 0000000..dc4ae8e --- /dev/null +++ b/tests/LaminasIntegration/data/controllerRequestResponseDynamicReturn-4.json @@ -0,0 +1,17 @@ +[ + { + "message": "Method LaminasPhpStan\\Tests\\LaminasIntegration\\data\\controllerRequestResponseDynamicReturn::foo() is unused.", + "line": 25, + "ignorable": true + }, + { + "message": "Method LaminasPhpStan\\Tests\\LaminasIntegration\\data\\controllerRequestResponseDynamicReturn::bar() is unused.", + "line": 44, + "ignorable": true + }, + { + "message": "Method LaminasPhpStan\\Tests\\LaminasIntegration\\data\\controllerRequestResponseDynamicReturn::baz() is unused.", + "line": 55, + "ignorable": true + } +] \ No newline at end of file diff --git a/tests/LaminasIntegration/data/pluginMethodDynamicReturn-4.json b/tests/LaminasIntegration/data/pluginMethodDynamicReturn-4.json new file mode 100644 index 0000000..6c6804b --- /dev/null +++ b/tests/LaminasIntegration/data/pluginMethodDynamicReturn-4.json @@ -0,0 +1,7 @@ +[ + { + "message": "Property LaminasPhpStan\\Tests\\LaminasIntegration\\data\\pluginMethodDynamicReturn::$phpRenderer is never written, only read.", + "line": 13, + "ignorable": true + } +] \ No newline at end of file diff --git a/tests/LaminasIntegration/data/serviceManagerDynamicReturn-3.json b/tests/LaminasIntegration/data/serviceManagerDynamicReturn-3.json index f9f5abd..b0b1214 100644 --- a/tests/LaminasIntegration/data/serviceManagerDynamicReturn-3.json +++ b/tests/LaminasIntegration/data/serviceManagerDynamicReturn-3.json @@ -1,6 +1,6 @@ [ { - "message": "Offset 'xyz' does not exist on array('foo' => 'bar').", + "message": "Offset 'xyz' does not exist on array{foo: 'bar'}.", "line": 43, "ignorable": true } diff --git a/tests/LaminasIntegration/data/stdlibAbstractOptionsProperties-4.json b/tests/LaminasIntegration/data/stdlibAbstractOptionsProperties-4.json new file mode 100644 index 0000000..8d68f89 --- /dev/null +++ b/tests/LaminasIntegration/data/stdlibAbstractOptionsProperties-4.json @@ -0,0 +1,7 @@ +[ + { + "message": "Property class@anonymous/stdlibAbstractOptionsProperties.php:27::$myxyz is never read, only written.", + "line": 28, + "ignorable": true + } +] \ No newline at end of file diff --git a/tests/Rules/Laminas/PluginManagerGetMethodCallRuleTest.php b/tests/Rules/Laminas/PluginManagerGetMethodCallRuleTest.php index 548cb2e..55db5f1 100644 --- a/tests/Rules/Laminas/PluginManagerGetMethodCallRuleTest.php +++ b/tests/Rules/Laminas/PluginManagerGetMethodCallRuleTest.php @@ -6,7 +6,6 @@ use LaminasPhpStan\Rules\Laminas\ServiceManagerGetMethodCallRule; use LaminasPhpStan\ServiceManagerLoader; -use LaminasPhpStan\Type\Laminas\ServiceManagerGetDynamicReturnTypeExtension; use PHPStan\Rules\Rule; use PHPStan\Testing\RuleTestCase; @@ -28,7 +27,7 @@ protected function setUp(): void */ protected function getRule(): Rule { - return new ServiceManagerGetMethodCallRule($this->createBroker(), $this->serviceManagerLoader); + return new ServiceManagerGetMethodCallRule($this->createReflectionProvider(), $this->serviceManagerLoader); } public function testRule(): void @@ -42,12 +41,12 @@ public function testRule(): void } /** - * @return \PHPStan\Type\DynamicMethodReturnTypeExtension[] + * @return string[] */ - public function getDynamicMethodReturnTypeExtensions(): array + public static function getAdditionalConfigFiles(): array { return [ - new ServiceManagerGetDynamicReturnTypeExtension($this->serviceManagerLoader), + __DIR__ . '/../../../extension.neon', ]; } } diff --git a/tests/Rules/Laminas/ServiceManagerGetMethodCallRuleTest.php b/tests/Rules/Laminas/ServiceManagerGetMethodCallRuleTest.php index df51955..46b89ec 100644 --- a/tests/Rules/Laminas/ServiceManagerGetMethodCallRuleTest.php +++ b/tests/Rules/Laminas/ServiceManagerGetMethodCallRuleTest.php @@ -43,7 +43,7 @@ public function provideContainerTypes(): array */ protected function getRule(): Rule { - return new ServiceManagerGetMethodCallRule($this->createBroker(), $this->serviceManagerLoader); + return new ServiceManagerGetMethodCallRule($this->createReflectionProvider(), $this->serviceManagerLoader); } /** diff --git a/tests/Type/Laminas/ServiceManagerLoaderTest.php b/tests/Type/Laminas/ServiceManagerLoaderTest.php index d6a6981..478215e 100644 --- a/tests/Type/Laminas/ServiceManagerLoaderTest.php +++ b/tests/Type/Laminas/ServiceManagerLoaderTest.php @@ -119,6 +119,7 @@ public function testLoaderReturnsTheProvidedServiceManager(): void $controllerPluginManager = $serviceManager->get('ControllerPluginManager'); + self::assertInstanceOf(ControllerPluginManager::class, $controllerPluginManager); self::assertFalse($controllerPluginManager->has('foo')); self::assertTrue($controllerPluginManager->has('bar'));