function ClassCoversExistsRule::processNode
File
-
vendor/
phpstan/ phpstan-phpunit/ src/ Rules/ PHPUnit/ ClassCoversExistsRule.php, line 51
Class
- ClassCoversExistsRule
- @implements Rule<InClassNode>
Namespace
PHPStan\Rules\PHPUnitCode
public function processNode(Node $node, Scope $scope) : array {
$classReflection = $node->getClassReflection();
if (!$classReflection->isSubclassOf(TestCase::class)) {
return [];
}
$classPhpDoc = $classReflection->getResolvedPhpDoc();
[
$classCovers,
$classCoversDefaultClasses,
] = $this->coversHelper
->getCoverAnnotations($classPhpDoc);
if (count($classCoversDefaultClasses) >= 2) {
return [
RuleErrorBuilder::message(sprintf('@coversDefaultClass is defined multiple times.'))->identifier('phpunit.coversDuplicate')
->build(),
];
}
$errors = [];
$coversDefaultClass = array_shift($classCoversDefaultClasses);
if ($coversDefaultClass !== null) {
$className = (string) $coversDefaultClass->value;
if (!$this->reflectionProvider
->hasClass($className)) {
$errors[] = RuleErrorBuilder::message(sprintf('@coversDefaultClass references an invalid class %s.', $className))->identifier('phpunit.coversClass')
->build();
}
}
foreach ($classCovers as $covers) {
$errors = array_merge($errors, $this->coversHelper
->processCovers($node, $covers, null));
}
return $errors;
}