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

Breadcrumb

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

class ImplementationOfDeprecatedInterfaceRule

@implements Rule<Class_>

Hierarchy

  • class \PHPStan\Rules\Deprecations\ImplementationOfDeprecatedInterfaceRule implements \PHPStan\Rules\Rule

Expanded class hierarchy of ImplementationOfDeprecatedInterfaceRule

File

vendor/phpstan/phpstan-deprecation-rules/src/Rules/Deprecations/ImplementationOfDeprecatedInterfaceRule.php, line 17

Namespace

PHPStan\Rules\Deprecations
View source
class ImplementationOfDeprecatedInterfaceRule implements Rule {
    
    /** @var ReflectionProvider */
    private $reflectionProvider;
    
    /** @var DeprecatedScopeHelper */
    private $deprecatedScopeHelper;
    public function __construct(ReflectionProvider $reflectionProvider, DeprecatedScopeHelper $deprecatedScopeHelper) {
        $this->reflectionProvider = $reflectionProvider;
        $this->deprecatedScopeHelper = $deprecatedScopeHelper;
    }
    public function getNodeType() : string {
        return Class_::class;
    }
    public function processNode(Node $node, Scope $scope) : array {
        if ($this->deprecatedScopeHelper
            ->isScopeDeprecated($scope)) {
            return [];
        }
        $errors = [];
        $className = isset($node->namespacedName) ? (string) $node->namespacedName : (string) $node->name;
        try {
            $class = $this->reflectionProvider
                ->getClass($className);
        } catch (ClassNotFoundException $e) {
            return [];
        }
        if ($class->isDeprecated()) {
            return [];
        }
        foreach ($node->implements as $implement) {
            $interfaceName = (string) $implement;
            try {
                $interface = $this->reflectionProvider
                    ->getClass($interfaceName);
                if ($interface->isDeprecated()) {
                    $description = $interface->getDeprecatedDescription();
                    if (!$class->isAnonymous()) {
                        if ($description === null) {
                            $errors[] = RuleErrorBuilder::message(sprintf('Class %s implements deprecated interface %s.', $className, $interfaceName))->identifier('class.implementsDeprecatedInterface')
                                ->build();
                        }
                        else {
                            $errors[] = RuleErrorBuilder::message(sprintf("Class %s implements deprecated interface %s:\n%s", $className, $interfaceName, $description))->identifier('class.implementsDeprecatedInterface')
                                ->build();
                        }
                    }
                    else {
                        if ($description === null) {
                            $errors[] = RuleErrorBuilder::message(sprintf('Anonymous class implements deprecated interface %s.', $interfaceName))->identifier('class.implementsDeprecatedInterface')
                                ->build();
                        }
                        else {
                            $errors[] = RuleErrorBuilder::message(sprintf("Anonymous class implements deprecated interface %s:\n%s", $interfaceName, $description))->identifier('class.implementsDeprecatedInterface')
                                ->build();
                        }
                    }
                }
            } catch (ClassNotFoundException $e) {
                // Other rules will notify if the interface is not found
            }
        }
        return $errors;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ImplementationOfDeprecatedInterfaceRule::$deprecatedScopeHelper private property @var DeprecatedScopeHelper
ImplementationOfDeprecatedInterfaceRule::$reflectionProvider private property @var ReflectionProvider
ImplementationOfDeprecatedInterfaceRule::getNodeType public function
ImplementationOfDeprecatedInterfaceRule::processNode public function
ImplementationOfDeprecatedInterfaceRule::__construct public function
RSS feed
Powered by Drupal