Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. SymfonyCmfRoutingInClassMethodSignatureRule.php

class SymfonyCmfRoutingInClassMethodSignatureRule

@implements Rule<InClassMethodNode>

Hierarchy

  • class \mglaman\PHPStanDrupal\Rules\Deprecations\SymfonyCmfRoutingInClassMethodSignatureRule implements \PHPStan\Rules\Rule

Expanded class hierarchy of SymfonyCmfRoutingInClassMethodSignatureRule

File

vendor/mglaman/phpstan-drupal/src/Rules/Deprecations/SymfonyCmfRoutingInClassMethodSignatureRule.php, line 23

Namespace

mglaman\PHPStanDrupal\Rules\Deprecations
View source
final class SymfonyCmfRoutingInClassMethodSignatureRule implements Rule {
    public function getNodeType() : string {
        return InClassMethodNode::class;
    }
    public function processNode(Node $node, Scope $scope) : array {
        if (DeprecatedScopeCheck::inDeprecatedScope($scope)) {
            return [];
        }
        [
            $major,
            $minor,
        ] = explode('.', Drupal::VERSION, 3);
        if ($major !== '9' || (int) $minor < 1) {
            return [];
        }
        $method = $node->getMethodReflection();
        // @phpstan-ignore-next-line
        $cmfRouteObjectInterfaceType = new ObjectType(RouteObjectInterface::class);
        // @phpstan-ignore-next-line
        $cmfRouteProviderInterfaceType = new ObjectType(RouteProviderInterface::class);
        // @phpstan-ignore-next-line
        $cmfLazyRouteCollectionType = new ObjectType(LazyRouteCollection::class);
        $methodSignature = ParametersAcceptorSelector::selectFromArgs($scope, [], $method->getVariants());
        $errors = [];
        $errorMessage = 'Parameter $%s of method %s() uses deprecated %s and removed in Drupal 10. Use %s instead.';
        foreach ($methodSignature->getParameters() as $parameter) {
            foreach ($parameter->getType()
                ->getReferencedClasses() as $referencedClass) {
                $referencedClassType = new ObjectType($referencedClass);
                if ($cmfRouteObjectInterfaceType->equals($referencedClassType)) {
                    $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $parameter->getName(), $method->getName(), $referencedClass, '\\Drupal\\Core\\Routing\\RouteObjectInterface'))
                        ->tip('Change record: https://www.drupal.org/node/3151009')
                        ->build();
                }
                elseif ($cmfRouteProviderInterfaceType->equals($referencedClassType)) {
                    $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $parameter->getName(), $method->getName(), $referencedClass, '\\Drupal\\Core\\Routing\\RouteProviderInterface'))
                        ->tip('Change record: https://www.drupal.org/node/3151009')
                        ->build();
                }
                elseif ($cmfLazyRouteCollectionType->equals($referencedClassType)) {
                    $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $parameter->getName(), $method->getName(), $referencedClass, '\\Drupal\\Core\\Routing\\LazyRouteCollection'))
                        ->tip('Change record: https://www.drupal.org/node/3151009')
                        ->build();
                }
            }
        }
        $errorMessage = 'Return type of method %s::%s() has typehint with deprecated %s and is removed in Drupal 10. Use %s instead.';
        $returnClasses = $methodSignature->getReturnType()
            ->getReferencedClasses();
        foreach ($returnClasses as $returnClass) {
            $returnType = new ObjectType($returnClass);
            if ($cmfRouteObjectInterfaceType->equals($returnType)) {
                $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $method->getDeclaringClass()
                    ->getName(), $method->getName(), $returnClass, '\\Drupal\\Core\\Routing\\RouteObjectInterface'))
                    ->tip('Change record: https://www.drupal.org/node/3151009')
                    ->build();
            }
            elseif ($cmfRouteProviderInterfaceType->equals($returnType)) {
                $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $method->getDeclaringClass()
                    ->getName(), $method->getName(), $returnClass, '\\Drupal\\Core\\Routing\\RouteProviderInterface'))
                    ->tip('Change record: https://www.drupal.org/node/3151009')
                    ->build();
            }
            elseif ($cmfLazyRouteCollectionType->equals($returnType)) {
                $errors[] = RuleErrorBuilder::message(sprintf($errorMessage, $method->getDeclaringClass()
                    ->getName(), $method->getName(), $returnClass, '\\Drupal\\Core\\Routing\\LazyRouteCollection'))
                    ->tip('Change record: https://www.drupal.org/node/3151009')
                    ->build();
            }
        }
        return $errors;
    }

}

Members

Title Sort descending Modifiers Object type Summary
SymfonyCmfRoutingInClassMethodSignatureRule::getNodeType public function
SymfonyCmfRoutingInClassMethodSignatureRule::processNode public function
RSS feed
Powered by Drupal