protected function getCodegenTrait()

in src/UriBuilderCodegenBuilder.hack [97:134]


  protected function getCodegenTrait(self::TSpec $spec): CodegenTrait {
    $trait = Shapes::idx($spec, 'trait');
    invariant(
      $trait !== null,
      "Can't codegen a trait without a trait spec",
    );

    $controller = $spec['controller'];
    $parameters = $controller::getUriPattern()->getParameters();

    $method = $this->cg
      ->codegenMethod($trait['method'])
      ->setIsFinal(true)
      ->setIsStatic(true)
      ->setReturnType($this->uriType);
    if ($parameters->isEmpty()) {
      $method->setBodyf(
        'return %s::%s();',
        $spec['class']['name'],
        $this->uriGetter,
      );
    } else {
      $method
        ->addParameterf(
          '%s::TParameters $parameters',
          $spec['class']['name'],
        )
        ->setBodyf(
          'return %s::%s($parameters);',
          $spec['class']['name'],
          $this->uriGetter,
        );
    }

    return $this->cg
      ->codegenTrait($trait['name'])
      ->addMethod($method);
  }