private function getContent()

in src/CodegenFile.hack [386:458]


  private function getContent(): string {
    $builder = (new HackBuilder($this->config));
    $builder->addLineIff(
      $this->fileNamespace !== null,
      'namespace %s;',
      $this->fileNamespace ?? '',
    );

    $get_use_statement = (string $type, string $ns, ?string $as) ==>
      \sprintf('use %s %s%s;', $type, $ns, $as === null ? '' : ' as '.$as);

    foreach ($this->useNamespaces as $ns => $as) {
      $builder->addLine($get_use_statement('namespace', $ns, $as));
    }
    foreach ($this->useTypes as $ns => $as) {
      $builder->addLine($get_use_statement('type', $ns, $as));
    }
    foreach ($this->useFunctions as $ns => $as) {
      $builder->addLine($get_use_statement('function', $ns, $as));
    }
    foreach ($this->useConsts as $ns => $as) {
      $builder->addLine($get_use_statement('const', $ns, $as));
    }

    $header = $this->pseudoMainHeader;
    if ($header !== null) {
      invariant(
        $this->fileType !== CodegenFileType::HACK_STRICT,
        'Pseudomains (and pseudomain headers) are not supported in strict files'
      );
      $builder->ensureNewLine()->add($header)->ensureNewLine();
    }

    foreach ($this->beforeTypes as $type) {
      $builder->ensureNewLine()->newLine();
      $builder->add($type->render());
    }
    foreach ($this->consts as $const) {
      $builder->ensureEmptyLine()->add($const->render());
    }
    foreach ($this->enums as $enum) {
      $builder->ensureNewLine()->newLine();
      $builder->add($enum->render());
    }
    foreach ($this->functions as $function) {
      $builder->ensureNewLine()->newLine();
      $builder->add($function->render());
    }
    foreach ($this->classes as $class) {
      $builder->ensureNewLine()->newLine();
      $builder->add($class->render());
    }

    foreach ($this->traits as $trait) {
      $builder->ensureNewLine()->newLine();
      $builder->add($trait->render());
    }

    foreach ($this->afterTypes as $type) {
      $builder->ensureNewLine()->newLine();
      $builder->add($type->render());
    }

    $footer = $this->pseudoMainFooter;
    if ($footer !== null) {
      invariant(
        $this->fileType !== CodegenFileType::HACK_STRICT,
        'Pseudomains (and pseudomain footers) are not supported in strict files'
      );
      $builder->ensureEmptyLine()->add($footer)->ensureNewLine();
    }
    return $builder->getCode();
  }