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'],
),
),
);
}
}