public override templateExpression()

in src/languages/java.ts [402:437]


  public override templateExpression(node: ts.TemplateExpression, renderer: JavaRenderer): OTree {
    let template = '';
    const parameters = new Array<OTree>();

    if (node.head.rawText) {
      template += node.head.rawText;
    }

    for (const span of node.templateSpans) {
      template += '%s';
      parameters.push(
        renderer
          .updateContext({
            convertPropertyToGetter: true,
            identifierAsString: false,
          })
          .convert(span.expression),
      );
      if (span.literal.rawText) {
        template += span.literal.rawText;
      }
    }

    if (parameters.length === 0) {
      return new OTree([JSON.stringify(quoteStringLiteral(template))]);
    }

    return new OTree([
      'String.format(',
      `"${quoteStringLiteral(template)
        // Java does not have multiline string literals, so we must replace literal newlines with %n
        .replace(/\n/g, '%n')}"`,
      ...parameters.reduce((list, element) => list.concat(', ', element), new Array<string | OTree>()),
      ')',
    ]);
  }