protected function getCodegenTrait()

in src/RequestParametersCodegenBuilder.hack [117:152]


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

    $trait = $this->cg
      ->codegenTrait($trait['name'])
      ->addMethod(
        $this->cg
          ->codegenMethod($trait['method'])
          ->setIsFinal(true)
          ->setProtected()
          ->setIsMemoized(true)
          ->setReturnTypef('%s::TParameters', $spec['class']['name'])
          ->setBody(
            $this->cg
              ->codegenHackBuilder()
              ->addAssignment(
                '$raw',
                $this->getRawParametersCode,
                HackBuilderValues::literal(),
              )
              ->addLinef('return (new %s($raw))', $spec['class']['name'])
              ->indent()
              ->addLine('->get();')
              ->getCode(),
          ),
      );

    foreach ($this->traitRequiredClasses as $class) {
      $trait->addRequireClass('\\'.$class);
    }
    foreach ($this->traitRequiredInterfaces as $class) {
      $trait->addRequireInterface('\\'.$class);
    }
    return $trait;
  }