private function walkMethods()

in src/PageSections/InterfaceSynopsis.hack [24:55]


  private function walkMethods(
    ScannedClassish $c,
  ): dict<string, (ScannedClassish, ScannedMethod)> {
    if ($c === null) {
      return dict[];
    }

    $methods =
      Dict\pull($c->getMethods(), $m ==> tuple($c, $m), $m ==> $m->getName());

    $parents = Vec\filter_nulls(
      Vec\concat(vec[$c->getParentClassName()], $c->getInterfaceNames()),
    );

    $index = $this->context->getIndex();
    foreach ($parents as $parent) {
      $parent = $index['classes'][$parent]['definition'] ??
        $index['interfaces'][$parent]['definition'] ??
        null;
      if (!$parent is ScannedClassish) {
        continue;
      }
      foreach ($this->walkMethods($parent) as $name => $data) {
        if (C\contains_key($methods, $name)) {
          continue;
        }
        $methods[$name] = $data;
      }
    }

    return $methods;
  }