in src/privateimpl/ClassFacts.hack [63:97]
public function doesImplement<T>(
classname<T> $wanted,
string $name,
): bool {
if (\substr($name, 0, 1) === '\\') {
$name = \substr($name, 1);
}
if ($name === $wanted) {
return true;
}
$class = $this->classes[($name)] ?? null;
if (!$class) {
return false;
}
foreach ($class->getInterfaceNames() as $interface) {
if ($this->doesImplement($wanted, $interface)) {
return true;
}
}
foreach ($class->getTraitNames() as $trait) {
if ($this->doesImplement($wanted, $trait)) {
return true;
}
}
$parent = $class->getParentClassName();
if ($parent !== null && $this->doesImplement($wanted, $parent)) {
return true;
}
return false;
}