function Mapper::stringToCodeUnits
Throws
File
-
vendor/
sebastian/ code-unit/ src/ Mapper.php, line 64
Class
Namespace
SebastianBergmann\CodeUnitCode
public function stringToCodeUnits(string $unit) : CodeUnitCollection {
if (str_contains($unit, '::')) {
[
$firstPart,
$secondPart,
] = explode('::', $unit);
if ($this->isUserDefinedFunction($secondPart)) {
return CodeUnitCollection::fromList(CodeUnit::forFunction($secondPart));
}
if ($this->isUserDefinedMethod($firstPart, $secondPart)) {
return CodeUnitCollection::fromList(CodeUnit::forClassMethod($firstPart, $secondPart));
}
if ($this->isUserDefinedInterface($firstPart)) {
return CodeUnitCollection::fromList(CodeUnit::forInterfaceMethod($firstPart, $secondPart));
}
if ($this->isUserDefinedTrait($firstPart)) {
return CodeUnitCollection::fromList(CodeUnit::forTraitMethod($firstPart, $secondPart));
}
}
else {
if ($this->isUserDefinedClass($unit)) {
$units = [
CodeUnit::forClass($unit),
];
foreach ($this->reflectorForClass($unit)
->getTraits() as $trait) {
if (!$trait->isUserDefined()) {
// @codeCoverageIgnoreStart
continue;
// @codeCoverageIgnoreEnd
}
$units[] = CodeUnit::forTrait($trait->getName());
}
return CodeUnitCollection::fromList(...$units);
}
if ($this->isUserDefinedInterface($unit)) {
return CodeUnitCollection::fromList(CodeUnit::forInterface($unit));
}
if ($this->isUserDefinedTrait($unit)) {
return CodeUnitCollection::fromList(CodeUnit::forTrait($unit));
}
if ($this->isUserDefinedFunction($unit)) {
return CodeUnitCollection::fromList(CodeUnit::forFunction($unit));
}
}
throw new InvalidCodeUnitException(sprintf('"%s" is not a valid code unit', $unit));
}