private function buildRequestParameters()

in src/Codegen.hack [222:275]


  private function buildRequestParameters(): void {
    $config = Shapes::idx($this->config, 'requestParameters');
    if ($config === null) {
      return;
    }
    $base = $config['baseClass'] ?? RequestParametersCodegen::class;
    $param_builder = $config['parameterCodegenBuilder']
      ?? new RequestParameterCodegenBuilder($this->getHackCodegenConfig());
    $get_output = $config['output'];
    $getParameters = $config['getParameters'] ??
      (classname<HasUriPattern> $class) ==> {
        return $class::getUriPattern()->getParameters()->map(
          $param ==> shape('spec' => $param, 'optional' => false),
        );
      };

    $builder = (new RequestParametersCodegenBuilder(
      $this->getHackCodegenConfig(),
      $getParameters,
      $config['trait']['getRawParametersCode'],
      $base,
      $param_builder,
    ))
      ->setDiscardChanges(Shapes::idx($this->config ?? shape(), 'discardChanges', false))
      ->setGeneratedFrom($this->getGeneratedFrom());
    foreach ($config['trait']['requireExtends'] ?? varray[] as $what) {
      $builder->traitRequireExtends($what);
    }
    foreach ($config['trait']['requireImplements'] ?? varray[] as $what) {
      $builder->traitRequireImplements($what);
    }

    $controllers = $this->controllerFacts->getControllers()->keys();
    foreach ($controllers as $controller) {
      $output = $get_output($controller);
      if ($output === null) {
        continue;
      }
      $builder->renderToFile(
        $output['file'],
        shape(
          'controller' => $controller,
          'namespace' => Shapes::idx($output, 'namespace'),
          'class' => shape(
            'name' => $output['class']['name'],
          ),
          'trait' => shape(
            'name' => $output['trait']['name'],
            'method' => $config['trait']['methodName'],
          ),
        ),
      );
    }
  }