function CodeCoverage::linesToBeUsed
@psalm-param class-string $className @psalm-param non-empty-string $methodName
@psalm-return array<string,list<int>>
Throws
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\ApiCode
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);
}