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

Breadcrumb

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

function CodeCoverage::linesToBeUsed

@psalm-param class-string $className @psalm-param non-empty-string $methodName

@psalm-return array<string,list<int>>

Throws

CodeCoverageException

File

vendor/phpunit/phpunit/src/Metadata/Api/CodeCoverage.php, line 137

Class

CodeCoverage
@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit

Namespace

PHPUnit\Metadata\Api

Code

public function linesToBeUsed(string $className, string $methodName) : array {
    $metadataForClass = Registry::parser()->forClass($className);
    $classShortcut = null;
    if ($metadataForClass->isUsesDefaultClass()
        ->isNotEmpty()) {
        if (count($metadataForClass->isUsesDefaultClass()) > 1) {
            throw new CodeCoverageException(sprintf('More than one @usesDefaultClass annotation for class or interface "%s"', $className));
        }
        $metadata = $metadataForClass->isUsesDefaultClass()
            ->asArray()[0];
        assert($metadata instanceof UsesDefaultClass);
        $classShortcut = $metadata->className();
    }
    $codeUnits = CodeUnitCollection::fromList();
    $mapper = new Mapper();
    foreach (Registry::parser()->forClassAndMethod($className, $methodName) as $metadata) {
        if (!$metadata->isUsesClass() && !$metadata->isUsesFunction() && !$metadata->isUses()) {
            continue;
        }
        assert($metadata instanceof UsesClass || $metadata instanceof UsesFunction || $metadata instanceof Uses);
        if ($metadata->isUsesClass() || $metadata->isUsesFunction()) {
            $codeUnits = $codeUnits->mergeWith($this->mapToCodeUnits($metadata));
        }
        elseif ($metadata->isUses()) {
            assert($metadata instanceof Uses);
            $target = $metadata->target();
            if ($classShortcut !== null && str_starts_with($target, '::')) {
                $target = $classShortcut . $target;
            }
            try {
                $codeUnits = $codeUnits->mergeWith($mapper->stringToCodeUnits($target));
            } catch (InvalidCodeUnitException $e) {
                throw new InvalidCoversTargetException(sprintf('"@uses %s" is invalid', $target), $e->getCode(), $e);
            }
        }
    }
    return $mapper->codeUnitsToSourceLines($codeUnits);
}
RSS feed
Powered by Drupal