public function doesImplement()

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;
  }