function NoClassMetadataOnAbstractTestClasses::processNode

File

core/tests/PHPStan/Rules/NoClassMetadataOnAbstractTestClasses.php, line 77

Class

NoClassMetadataOnAbstractTestClasses
Ensures abstract test base classes do not carry metadata.

Namespace

Drupal\PHPStan\Rules

Code

public function processNode(Node $node, Scope $scope) : array {
  $class = $node->getClassReflection();
  if ($class->isSubclassOfClass($this->reflectionProvider
    ->getClass(TestCase::class)) && $class->isAbstract()) {
    $fails = [];
    foreach ($class->getAttributes() as $attribute) {
      if (str_starts_with($attribute->getName(), 'PHPUnit\\Framework\\Attributes\\')) {
        $fails[] = RuleErrorBuilder::message("Abstract test class {$class->getName()} must not add attribute {$attribute->getName()}.")
          ->identifier('abstractTestClass.metadataForbidden')
          ->line($node->getStartLine())
          ->build();
      }
    }
    $resolvedPhpDoc = $class->getResolvedPhpDoc();
    if ($resolvedPhpDoc) {
      foreach ($resolvedPhpDoc->getPhpDocNodes() as $phpDocNode) {
        foreach ($phpDocNode->getTags() as $tag) {
          if (in_array($tag->name, $this->annotationTargets, TRUE)) {
            $fails[] = RuleErrorBuilder::message("Abstract test class {$class->getName()} must not add annotation {$tag->name}.")
              ->identifier('abstractTestClass.metadataForbidden')
              ->line($node->getStartLine())
              ->build();
          }
        }
      }
    }
    return $fails;
  }
  return [];
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.