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;
}